Compare commits

..

96 Commits

Author SHA1 Message Date
Benny Malengier 4d7d108ea9 3580: People list (private handlers) and display Name format
in reality: associations are not removed on delete person


svn: r14385
2010-02-15 12:16:08 +00:00
Benny Malengier 9e1e197460 new gtk version has also a set_window
svn: r14188
2010-02-02 08:10:09 +00:00
Richard Taylor 351b010e7a SVN reorganisation: Move current maintenance branches
svn: r12909
2009-08-07 08:12:48 +00:00
Benny Malengier 71a93fe08e 2956: Errors with GTKPrint on Ubuntu 9.04
svn: r12545
2009-05-19 08:59:31 +00:00
Benny Malengier 75787c8478 2995: Unable to produce Narrated Web Site using filter and privacy settings
svn: r12544
2009-05-19 08:44:03 +00:00
Benny Malengier ae2534b2cd 3001: crash on Narrated Web Site report on my database
svn: r12539
2009-05-19 08:19:56 +00:00
Benny Malengier d3212fe5b5 2942: Note in Family eventref not referenced, also source of attribute of family eventref
svn: r12533
2009-05-18 14:01:13 +00:00
Benny Malengier 5e06dce821 02880: old api use in import grdb
svn: r12400
2009-03-31 21:32:35 +00:00
Doug Blank 077c0dff10 2816: Compilation from source; need to delete old version first
svn: r12339
2009-03-14 12:02:07 +00:00
Joan Creus 3e00cd60ca Backporting Catalan translation, just in case
svn: r12122
2009-02-25 23:34:13 +00:00
Jérôme Rapinat ee65c280aa update polish translation (by Łukasz Rymarczyk)
svn: r12112
2009-02-24 17:17:54 +00:00
Luigi Toscano 65ed064538 Translation updates and fixes.
svn: r12085
2009-02-22 23:47:43 +00:00
Arturas Sleinius 481b842ecd Updated Lithuanian translation
svn: r12075
2009-02-22 14:17:46 +00:00
Joan Creus d68636b1d1 typo: Create Commons->Creative Commons
svn: r12074
2009-02-22 13:45:43 +00:00
Espen Berg d4a681bac2 Revised Norwegian Nynorsk translation. 100% completed for 3.0-branch. Thanks to Sigmund Lorentsen, member of DIS-Norge
svn: r12003
2009-02-16 08:24:06 +00:00
Mirko Leonhäuser 3f4eb22ef3 Updated German translation
svn: r11997
2009-02-15 20:32:56 +00:00
Gary Burton ceaa2bc6c8 Fix for bug #2703: Custom Marker text appears in Relationship Type field.
svn: r11993
2009-02-15 14:55:50 +00:00
Espen Berg 047ea2a185 Revised Norwegian Nynorsk translation
svn: r11987
2009-02-14 22:08:16 +00:00
Benny Malengier f0baf7963f 2665: PDF: Paginate error in descendant chart (graphical) on person without descendants
svn: r11985
2009-02-14 13:44:52 +00:00
Luigi Toscano d3982cbeeb Updates and fixes.
svn: r11974
2009-02-12 16:57:45 +00:00
Luigi Toscano cd847db1d6 Updates and fixes.
svn: r11965
2009-02-11 19:23:15 +00:00
Luigi Toscano 26fa2a0fd0 Fixes
svn: r11956
2009-02-10 22:48:09 +00:00
Luigi Toscano a83dd4be75 Translation updates and fixes
svn: r11949
2009-02-10 15:40:13 +00:00
Peter Landgren 412a0c690f Missed _ key.
svn: r11900
2009-02-07 18:02:43 +00:00
Peter Landgren e8dc0804b3 Fix of issue 2684, duplicate _C.
svn: r11899
2009-02-07 18:01:24 +00:00
Benny Malengier d200ba839a 0002633: Characters in Notes don't show in report - 3.0.4 and trunk
1357: Incorrect marriage event description when outputting to PDF
1328: opened a gedcom, and create a pdf text file


svn: r11894
2009-02-07 10:37:57 +00:00
Luigi Toscano 73f0e769f7 Updates and fixes.
svn: r11889
2009-02-07 00:48:28 +00:00
Luigi Toscano 386c0b8089 Updates and fixes
svn: r11887
2009-02-06 16:13:57 +00:00
Luigi Toscano 9ca071b619 Updates for the Italian translation
svn: r11881
2009-02-06 01:01:32 +00:00
Luigi Toscano 03a2ba2312 Updates for the Italian translations
svn: r11876
2009-02-05 18:53:29 +00:00
Espen Berg 3e14d594ec Revised Norwegian Nynorsk translation
svn: r11875
2009-02-05 18:16:08 +00:00
Luigi Toscano 02786a4dce Fix surname string in the generated surname summary page.
This was fixed with r10310 in trunk.


svn: r11873
2009-02-05 16:36:21 +00:00
Benny Malengier 6b99247d57 1816: Place Editor has no focus on a field when opened. All other editors do
svn: r11871
2009-02-05 13:19:20 +00:00
Luigi Toscano fd9940ad53 Updates for the Italian translation
svn: r11859
2009-02-05 01:12:38 +00:00
Gary Burton c7c32adb15 Fix import of note markers. Bug #2568
svn: r11856
2009-02-04 20:58:48 +00:00
Luigi Toscano 6c42489b2c Updates and fixes for the italian translation
svn: r11813
2009-02-03 01:22:39 +00:00
Espen Berg f21cadcd61 Revised Norwegian Bokmaal translation
svn: r11812
2009-02-02 22:02:27 +00:00
Peter Landgren 68f5670972 Fix in branch for issue 2667.
svn: r11808
2009-02-02 19:38:31 +00:00
Luigi Toscano 70db887bd4 Updates for the Italian translation
svn: r11795
2009-02-02 00:21:37 +00:00
Gary Burton c695f4b2c3 Treat RESI tokens as events and not import them as Gramps addresses as per advice on the wiki concerning using residence events to record addresses. Bug #2651
svn: r11788
2009-02-01 12:35:47 +00:00
Jérôme Rapinat e23f96e655 #2657,#1718 to avoid migration issue, support ngettext
svn: r11784
2009-02-01 08:53:51 +00:00
Jérôme Rapinat bc7aab8cbb 1357: Incorrect marriage event description when outputting to PDF (only ampersand, < > ?)
svn: r11750
2009-01-28 08:59:58 +00:00
Jérôme Rapinat 8123f5e692 update Slovak translation (Lubo Vasko)
svn: r11733
2009-01-26 19:07:40 +00:00
Benny Malengier ccf3d05cd0 #2533 Parallel install fails with -j8 for make - patch by Diego Pettenò <flameeyes AT gentoo.ort>
svn: r11731
2009-01-26 08:31:23 +00:00
Gary Burton 6559d3f49d Make GEDCOM export output family event descriptions as type. Bug 2649.
svn: r11721
2009-01-25 19:57:09 +00:00
Mirko Leonhäuser ef74039d1d Fixed minor error in translation J insted Y by image handling
svn: r11708
2009-01-24 19:29:33 +00:00
Peter Landgren 37f51ac7b1 Fix of issue 2640.
svn: r11707
2009-01-24 17:50:20 +00:00
Jérôme Rapinat 116591894b typo on french translation
svn: r11704
2009-01-24 09:42:54 +00:00
Doug Blank c333394216 Bug #2614: Error Entering Slash Date; also applied fix for dates that had spaces in them
svn: r11696
2009-01-23 02:12:41 +00:00
Erik De Richter 799f7579a9 update nl.po
svn: r11694
2009-01-22 20:01:16 +00:00
Peter Landgren 75ae290e6d Update of Swedish translation.
svn: r11693
2009-01-22 19:55:34 +00:00
Jérôme Rapinat 74255967a5 update french translation
svn: r11690
2009-01-22 19:18:09 +00:00
Espen Berg e41a64e62a Revised Norwegian Bokmål and Nynorsk translations
svn: r11682
2009-01-22 10:37:18 +00:00
Kees Bakker 7798bf78b8 Process most common (Dutch) surname prefixes.
Date conversion improvement (Dutch month names, etc).
Store patroniem in Patronymic field.
	* src/plugins/ImportProGen.py


svn: r11654
2009-01-18 11:38:38 +00:00
Mirko Leonhäuser 6de1c5d177 Updated German translation
svn: r11642
2009-01-17 11:23:54 +00:00
Brian Matherly 8fd1eae385 0002432: Detailed reports place dots where they do not belong.
svn: r11627
2009-01-15 21:04:52 +00:00
Brian Matherly f1aee137f6 0001973: Show all or no half siblings in Detailed Ancestral Report
svn: r11625
2009-01-15 16:23:44 +00:00
Doug Blank 7d6da4fedb Bug #2567: Person Filter bug: 'people without a known birth date' doesn't work correctly
svn: r11620
2009-01-13 22:25:21 +00:00
Jérôme Rapinat a581f9a704 additional strings on french translation
svn: r11615
2009-01-12 10:27:39 +00:00
Peter Landgren 99357fdd0e Fix of issue 2606.
svn: r11610
2009-01-11 08:46:17 +00:00
Mirko Leonhäuser a964f7983b Fixed minor error in translation
svn: r11608
2009-01-10 20:15:46 +00:00
Gary Burton 9c5cd62f8e Cleaner method of handling whitespace. Contributed by Tim Lyons (tim.g.lyons@googlemail.com)
svn: r11600
2009-01-10 15:16:47 +00:00
Jérôme Rapinat 20058bc120 update french translation
svn: r11598
2009-01-10 11:55:04 +00:00
Mirko Leonhäuser bdb824f7f7 Fixed translation for bug #0002416 to NACHNAME
svn: r11594
2009-01-10 00:47:50 +00:00
Mirko Leonhäuser bba639ba79 Updated German translation
svn: r11589
2009-01-08 17:49:49 +00:00
Doug Blank e014eecf5b Backported fixes for Pedigree Gramplet, bug #2081 and others. Added 2 new strings that need translation which were part of a bugfix from PeterL
svn: r11587
2009-01-08 12:12:01 +00:00
Doug Blank 1b25cd8b47 Fixes for bug #2416: added proper name format in gtk tree model, and update on canceled edit
svn: r11583
2009-01-08 02:00:31 +00:00
Kees Bakker d5177c4b8c Small bugfix for 2597, copied from trunk.
* src/plugins/NarrativeWeb.py


svn: r11581
2009-01-07 21:28:46 +00:00
Peter Landgren 4a13dd9e55 Fix of 2570.
svn: r11580
2009-01-07 16:37:32 +00:00
Kees Bakker 2456d317a6 Adding a gramps30 compatible version of ImportProgen.py
* src/plugins/ImportProGen.py


svn: r11579
2009-01-06 21:07:22 +00:00
Doug Blank 3c722ffb5d Fix for 2416: don't save translated name-formats in XML
svn: r11568
2009-01-04 19:35:05 +00:00
Doug Blank a518a48140 Fix for #2582: lower translated gender terms
svn: r11544
2008-12-31 03:07:33 +00:00
Espen Berg fb724c63a8 Revised Norwegian translation
svn: r11527
2008-12-27 21:30:55 +00:00
Espen Berg 49e2720891 Corrected a phrase in Norwegian translation
svn: r11497
2008-12-19 21:48:19 +00:00
Erik De Richter 6c25bf079a update Dutch translation
svn: r11495
2008-12-19 09:37:14 +00:00
Jérôme Rapinat 2803b912d1 Update Slovak translation (by Lubo Vasko)
svn: r11492
2008-12-19 08:52:03 +00:00
Espen Berg a73d866fa3 Changed speed-key for repositories in Norwegian translation
svn: r11491
2008-12-18 19:33:04 +00:00
Espen Berg a357dcd749 Revised Norwegian translation
svn: r11487
2008-12-17 19:33:24 +00:00
Gary Burton 9571022f45 Gedcom compliance. Bug #2558: Further fix for when a media note is not present.
svn: r11486
2008-12-16 21:54:33 +00:00
Mirko Leonhäuser f23838d954 Updated German translation
svn: r11484
2008-12-16 16:59:58 +00:00
Espen Berg 2b192f64b6 Revised Norwegian translation
svn: r11483
2008-12-16 14:18:59 +00:00
Peter Landgren 1ee0e7fb86 Moved files from POTFILES.skip to POTFILES.in
svn: r11482
2008-12-16 14:02:47 +00:00
Jérôme Rapinat c3ef7bfa4c Update Catalan translation (by Joan Creus)
svn: r11479
2008-12-15 09:02:53 +00:00
Jérôme Rapinat dacdf1d50e 2561: Typo (contribution by Joan Creus)
svn: r11477
2008-12-15 08:56:25 +00:00
Gary Burton 1eeac8c624 Gedcom compliance. Bug #2558: Notes in the GEDCOM multimedia objects not imported. Also fixed importing of repository notes.
svn: r11467
2008-12-13 17:03:26 +00:00
Gary Burton 61f5f0f0fb Gedcom compliance. Bug #2555: Blanks at the begining of Gedcom CONT fields.
svn: r11464
2008-12-12 21:55:33 +00:00
Mirko Leonhäuser a0cc7005df Updated German translation
svn: r11463
2008-12-12 21:42:47 +00:00
Julio Sánchez 22d2b3a3e5 Partial update
svn: r11460
2008-12-12 12:55:18 +00:00
Julio Sánchez 1cc60935eb Partial update
svn: r11458
2008-12-12 06:02:39 +00:00
Julio Sánchez ba8bada3ff Partial update
svn: r11454
2008-12-11 12:17:43 +00:00
Jérôme Rapinat 3b70c6f716 2556: Typo (by Joan Creus)
svn: r11452
2008-12-11 10:10:36 +00:00
Jérôme Rapinat bbd951b9bb 2528: Typo (by Joan Creus)
svn: r11445
2008-12-08 09:56:37 +00:00
Benny Malengier aadc0009af No longer upgrade from gconf for ini settings
svn: r11443
2008-12-08 09:14:40 +00:00
Benny Malengier 567315931e GtkSpinButton: setting an adjustment with non-zero page size is deprecated
Patch Josip


svn: r11437
2008-12-07 20:31:19 +00:00
Stéphane Charette 646977caf4 bump next version to 3.0.5
svn: r11434
2008-12-07 10:06:35 +00:00
Jérôme Rapinat 2928384624 update Croatian translation (by Josip)
svn: r11431
2008-12-07 07:58:07 +00:00
65 changed files with 23413 additions and 16288 deletions
+16
View File
@@ -4,6 +4,22 @@ This file contains some useful details on the installation from source code
for GRAMPS. It does not cover installation of a pre-built binary package.
For that use your package manager, the rest is already done by the packager.
uninstall old version
---------------------
If you do a source install in the same place of an existing install,
you need to remove the old version first. You can delete the old
version by:
* deleting the installed directories (for example,
/usr/share/gramps)
* OR by running "make uninstall" from the old directory where you
ran "make install" (not the new GRAMPS directory)
GRAMPS is a python application, so loading happens on reading the
files, meaning that files of a previous version that are no longer
present in the new version can still be loaded, making the new install
unstable.
configure vs autogen scripts
----------------------------
+1 -1
View File
@@ -5,7 +5,7 @@ dnl May need to run automake && aclocal first
AC_PREREQ(2.57)
dnl NOTE: 1st arg to macro below becomes the "VERSION"
AC_INIT(gramps, 3.0.4, [gramps-bugs@lists.sourceforge.net])
AC_INIT(gramps, 3.0.5, [gramps-bugs@lists.sourceforge.net])
AC_CONFIG_SRCDIR(configure.in)
AM_INIT_AUTOMAKE([1.6.3 foreign])
+3
View File
@@ -28,6 +28,7 @@ src/gramps_main.py
src/gramps.py
src/GrampsWidgets.py
src/ImgManip.py
src/LdsUtils.py
src/ListModel.py
src/ManagedWindow.py
src/MarkupText.py
@@ -113,6 +114,7 @@ src/docgen/LaTeXDoc.py
src/docgen/ODSDoc.py
src/docgen/ODFDoc.py
src/docgen/ODSTab.py
src/docgen/PdfDoc.py
src/docgen/PSDrawDoc.py
src/docgen/RTFDoc.py
src/docgen/SpreadSheetDoc.py
@@ -229,6 +231,7 @@ src/GrampsLogger/_RotateHandler.py
# Mime package
src/Mime/_GnomeMime.py
src/Mime/__init__.py
src/Mime/_WinMime.py
src/Mime/_PythonMime.py
# Selectors package
-4
View File
@@ -1,6 +1,2 @@
src/gen/lib/styledtext.py
src/gen/lib/styledtexttagtype.py
src/LdsUtils.py
src/Mime/_WinMime.py
src/ReportBase/_DocReportDialog.py
src/docgen/PdfDoc.py
+1
View File
@@ -16,6 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../src/ArgHandler.py:404 ../src/DbLoader.py:167 ../src/DbLoader.py:188
#: ../src/DbLoader.py:276
+1779 -1476
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -14,6 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.4\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../src/ArgHandler.py:404 ../src/DbLoader.py:167 ../src/DbLoader.py:188
#: ../src/DbLoader.py:276
+785 -755
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -18,6 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.4\n"
"X-Generator: KBabel 1.0.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../src/ArgHandler.py:404 ../src/DbLoader.py:167 ../src/DbLoader.py:188
#: ../src/DbLoader.py:276
+5203 -2287
View File
File diff suppressed because it is too large Load Diff
+1660 -547
View File
File diff suppressed because it is too large Load Diff
+405 -376
View File
File diff suppressed because it is too large Load Diff
+944 -938
View File
File diff suppressed because it is too large Load Diff
+1670 -1394
View File
File diff suppressed because it is too large Load Diff
+2119 -1371
View File
File diff suppressed because it is too large Load Diff
+366 -338
View File
File diff suppressed because it is too large Load Diff
+691 -650
View File
File diff suppressed because it is too large Load Diff
+3068 -2977
View File
File diff suppressed because it is too large Load Diff
+813 -770
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -16,6 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: ../src/ArgHandler.py:404 ../src/DbLoader.py:167 ../src/DbLoader.py:188
#: ../src/DbLoader.py:276
+1
View File
@@ -15,6 +15,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.4\n"
"X-Generator: KBabel 0.9.6\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);\n"
#: ../src/ArgHandler.py:404 ../src/DbLoader.py:167 ../src/DbLoader.py:188
#: ../src/DbLoader.py:276
+1
View File
@@ -20,6 +20,7 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
"X-Poedit-Language: Russian\n"
"X-Poedit-Country: RUSSIAN FEDERATION\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10< =4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: ../src/ArgHandler.py:404 ../src/DbLoader.py:167 ../src/DbLoader.py:188
#: ../src/DbLoader.py:276
+1459 -1411
View File
File diff suppressed because it is too large Load Diff
+713 -683
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -14,6 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.4\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../src/ArgHandler.py:404 ../src/DbLoader.py:167 ../src/DbLoader.py:188
#: ../src/DbLoader.py:276
+1
View File
@@ -14,6 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.4\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../src/ArgHandler.py:404 ../src/DbLoader.py:167 ../src/DbLoader.py:188
#: ../src/DbLoader.py:276
-17
View File
@@ -29,21 +29,4 @@ It provides the choice between different storage backends.
from _GrampsConfigKeys import *
from _GrampsIniKeys import *
import os
def __upgrade_gconf():
import _GrampsGconfKeys as GconfKeys
print "Upgrading INI file"
for key in default_value.keys():
data = GconfKeys.get(key)
set(key, data)
if not os.path.exists(INIFILE):
try:
__upgrade_gconf()
except ImportError:
print "Cannot upgrade GCONF settings"
+1 -1
View File
@@ -160,7 +160,7 @@ class PersonView(PageView.PersonNavView):
_("Remove the Selected Person"), self.remove),
('ColumnEdit', gtk.STOCK_PROPERTIES, _('_Column Editor...'), None,
None, self._column_editor),
('CmpMerge', None, _('_Compare and Merge...'), None, None,
('CmpMerge', None, _('Compare and _Merge...'), None, None,
self.cmp_merge),
('FastMerge', None, _('_Fast Merge...'), None, None,
self.fast_merge),
+5 -5
View File
@@ -162,12 +162,12 @@ class DateDisplay:
val = - val
if slash:
if val % 100 == 99:
year = "%d/%d" % (val, (val%1000)+1)
elif val % 10 == 9:
year = "%d/%d" % (val, (val%100)+1)
if (val-1) % 100 == 99:
year = "%d/%d" % (val - 1, (val%1000))
elif (val-1) % 10 == 9:
year = "%d/%d" % (val - 1, (val%100))
else:
year = "%d/%d" % (val, (val%10)+1)
year = "%d/%d" % (val - 1, (val%10))
else:
year = "%d" % (val)
+47 -18
View File
@@ -75,6 +75,23 @@ def gregorian_valid(date_tuple):
valid = False
return valid
def julian_valid(date_tuple):
day = date_tuple[0]
month = date_tuple[1]
valid = True
try:
if month > 12:
valid = False
elif (date_tuple[2]) % 4 == 0:
# julian always have leapyear every 4 year
if day > _leap_days[month-1]:
valid = False
elif day > _max_days[month-1]:
valid = False
except:
valid = False
return valid
#-------------------------------------------------------------------------
#
# Parser class
@@ -186,8 +203,8 @@ class DateParser:
def __init__(self):
self.init_strings()
self.parser = {
Date.CAL_GREGORIAN : self._parse_greg_julian,
Date.CAL_JULIAN : self._parse_greg_julian,
Date.CAL_GREGORIAN : self._parse_gregorian,
Date.CAL_JULIAN : self._parse_julian,
Date.CAL_FRENCH : self._parse_french,
Date.CAL_PERSIAN : self._parse_persian,
Date.CAL_HEBREW : self._parse_hebrew,
@@ -311,10 +328,14 @@ class DateParser:
return self._parse_calendar(text, self._ftext, self._ftext2,
self.french_to_int)
def _parse_greg_julian(self, text):
def _parse_gregorian(self, text):
return self._parse_calendar(text, self._text, self._text2,
self.month_to_int, gregorian_valid)
def _parse_julian(self, text):
return self._parse_calendar(text, self._text, self._text2,
self.month_to_int, julian_valid)
def _parse_calendar(self, text, regex1, regex2, mmap, check=None):
match = regex1.match(text.lower())
if match:
@@ -330,8 +351,12 @@ class DateParser:
s = False
else:
d = self._get_int(groups[1])
y = int(groups[3])
s = groups[4] != None
if groups[4] is not None: # slash year "/80"
y = int(groups[3]) + 1 # fullyear + 1
s = True
else: # regular, non-slash date
y = int(groups[3])
s = False
value = (d, m, y, s)
if check and not check((d, m, y)):
value = Date.EMPTY
@@ -351,8 +376,12 @@ class DateParser:
y = None
s = False
else:
y = int(groups[3])
s = groups[4] != None
if groups[4] is not None: # slash year digit
y = int(groups[3]) + 1 # fullyear + 1
s = True
else: # regular year
y = int(groups[3])
s = False
value = (d, m, y, s)
if check and not check((d, m, y)):
value = Date.EMPTY
@@ -365,17 +394,21 @@ class DateParser:
Convert only the date portion of a date.
"""
if subparser == None:
subparser = self._parse_greg_julian
subparser = self._parse_gregorian
if subparser == self._parse_greg_julian:
if subparser == self._parse_gregorian:
check = gregorian_valid
elif subparser == self._parse_julian:
check = julian_valid
else:
check = None
value = subparser(text)
if value != Date.EMPTY:
return value
match = self._iso.match(text)
if match:
groups = match.groups()
@@ -384,8 +417,8 @@ class DateParser:
d = self._get_int(groups[4])
if check and not check((d, m, y)):
return Date.EMPTY
if groups[2]:
return (d, m, y, True)
if groups[2]: # slash year digit
return (d, m, y + 1, True)
else:
return (d, m, y, False)
@@ -511,7 +544,7 @@ class DateParser:
try:
text = match.group(1) + match.group(3)
except:
print "MATCH:", match.groups()
print "ERROR MATCH:", match.groups()
bc = True
return (text, bc)
@@ -564,7 +597,7 @@ class DateParser:
"""
Parses the text and sets the date according to the parsing.
"""
text = text.strip() # otherwise spaces can make it a bad date
date.set_text_value(text)
qual = Date.QUAL_NONE
cal = Date.CAL_GREGORIAN
@@ -595,10 +628,6 @@ class DateParser:
else:
date.set(qual, Date.MOD_NONE, cal, subdate)
if date.get_slash():
date.set_calendar(Date.CAL_JULIAN)
date.set_year(date.get_year() + 1) # year++ and forces recalc
def invert_year(self, subdate):
return (subdate[0], subdate[1], -subdate[2], subdate[3])
+2 -1
View File
@@ -2,6 +2,7 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2007 Donald N. Allingham
# 2009 Gary Burton
#
# 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
@@ -572,7 +573,7 @@ class EditFamily(EditPrimary):
self.obj.set_relationship,
self.obj.get_relationship,
self.db.readonly,
self.db.get_marker_types(),
self.db.get_family_relation_types(),
)
def load_data(self):
+3 -1
View File
@@ -117,7 +117,9 @@ class ExportAssistant(gtk.Assistant, ManagedWindow.ManagedWindow) :
self.top_title = _("Export Assistant")
ManagedWindow.ManagedWindow.__init__(self,uistate,[],
self.__class__)
self.set_window(self, None, self.top_title, isWindow=True)
#set_window is present in both parent classes
ManagedWindow.ManagedWindow.set_window(self, self, None,
self.top_title, isWindow=True)
#set up callback method for the export plugins
self.callback = self.pulse_progressbar
+6 -2
View File
@@ -49,6 +49,10 @@ class NoBirthdate(Rule):
if not birth_ref:
return True
birth = db.get_event_from_handle(birth_ref.ref)
if not birth.get_date_object():
return True
if birth:
birth_obj = birth.get_date_object()
if not birth_obj:
return True
if birth_obj.sortval == 0:
return True
return False
+1 -1
View File
@@ -79,7 +79,7 @@ class GrampsAboutDialog(gtk.AboutDialog):
_("Much of GRAMPS' artwork is either from\n"
"the Tango Project or derived from the Tango\n"
"Project. This artwork is released under the\n"
"Create Commons Attribution-ShareAlike 2.5\n"
"Creative Commons Attribution-ShareAlike 2.5\n"
"license.")
])
+31 -4
View File
@@ -360,14 +360,37 @@ class GrampsPreferences(ManagedWindow.ManagedWindow):
"%s %s, %s" % (_("Given"), _("SURNAME"), _("Suffix")),
"%s /%s/" % (_("Given"), _("SURNAME")),
]
f = lyst[int(random.random() * len(lyst))]
i = _nd.add_name_format(f, f.lower())
node = self.fmt_model.append(row=[i, f, f.lower(),
_nd.format_str(self.examplename, f)])
fmtlyst = ["%s, %s %s (%s)" % ("Surname", "Given", "Suffix",
"Common"),
"%s, %s %s (%s)" % ("Surname", "Given", "Suffix",
"Call"),
"%s, %s %s (%s)" % ("SURNAME", "Given", "Suffix",
"Call"),
"%s, %s (%s)" % ("Surname", "Given", "Common"),
"%s, %s (%s)" % ("Surname", "Given", "Call"),
"%s %s" % ("Given", "Surname"),
"%s %s, %s" % ("Given", "Surname", "Suffix"),
"%s %s %s" % ("Given", "Surname", "Patronymic"),
"%s, %s %s (%s)" % ("SURNAME", "Given", "Suffix",
"Common"),
"%s, %s (%s)" % ("SURNAME", "Given", "Common"),
"%s, %s (%s)" % ("SURNAME", "Given", "Call"),
"%s %s" % ("Given", "SURNAME"),
"%s %s, %s" % ("Given", "SURNAME", "Suffix"),
"%s /%s/" % ("Given", "SURNAME"),
]
rand = int(random.random() * len(lyst))
f = lyst[rand]
fmt = fmtlyst[rand]
i = _nd.add_name_format(f, fmt)
node = self.fmt_model.append(row=[i, f, fmt,
_nd.format_str(self.examplename, fmt)])
path = self.fmt_model.get_path(node)
self.format_list.set_cursor(path,
focus_column=self.name_column,
start_editing=True)
self.__current_path = path
self.__current_text = f
def __edit_name(self, obj):
store, node = self.format_list.get_selection().get_selected()
@@ -395,6 +418,9 @@ class GrampsPreferences(ManagedWindow.ManagedWindow):
iter = model.iter_next(iter)
return False
def __cancel_change(self, obj):
self.__change_name("", self.__current_path, self.__current_text)
def __change_name(self, text, path, new_text):
"""
If the new string is empty, do nothing. Otherwise, renaming the
@@ -457,6 +483,7 @@ class GrampsPreferences(ManagedWindow.ManagedWindow):
text=COL_NAME)
name_renderer.set_property('editable', False)
name_renderer.connect('edited', self.__change_name)
name_renderer.connect('editing-canceled', self.__cancel_change)
self.name_renderer = name_renderer
format_tree.append_column(name_column)
example_renderer = gtk.CellRendererText()
+28 -11
View File
@@ -255,7 +255,10 @@ def extract_date(text):
"""
dateobj = gen.lib.Date()
text = text.replace('BET ABT','EST BET') # Horrible hack for Tim Lyons
text = text.replace('BET ABT','EST BET') # Horrible hack for importing
# illegal GEDCOM from
# Apple Macintosh Classic
# 'Gene' program
try:
# extract out the MOD line
@@ -352,9 +355,13 @@ class Reader:
def __fix_token_conc(self, data):
line = self.current_list[0]
if len(line[2]) == 4:
# This deals with lines of the form
# 0 @<XREF:NOTE>@ NOTE
# 1 CONC <SUBMITTER TEXT>
# The previous line contains only a tag and no data so concat a
# space to separate the new line from the tag. This prevents the
# first letter of the new line being lost later.
# first letter of the new line being lost later
# in _GedcomParse.__parse_record
new_value = line[2] + ' ' + data[2]
else:
new_value = line[2] + data[2]
@@ -362,24 +369,34 @@ class Reader:
def __readahead(self):
while len(self.current_list) < 5:
linetmp = self.ifile.readline()
line = self.ifile.readline()
self.index += 1
if not linetmp:
if not line:
self.eof = True
return
try:
# the space ensures no trailing whitespace on last parm
line = linetmp.strip(' \n\r').split(None, 2) + ['']
# however keep trailing whitespace on notes only
if line[1] in ['CONT', 'CONC'] or line[2].startswith('NOTE'):
line = linetmp.strip('\n\r').split(None, 2) + ['']
# According to the GEDCOM 5.5 standard,
# Chapter 1 subsection Grammar
#"leading whitespace preceeding a GEDCOM line should be ignored"
# We will also strip the terminator which is any combination
# of carriage_return and line_feed
line = line.lstrip(' ').rstrip('\n\r')
# split into level+delim+rest
line = line.partition(' ')
level = int(line[0])
# there should only be one space after the level,
# but we can ignore more,
# then split into tag+delim+line_value
# or xfef_id+delim+rest
line = line[2].lstrip(' ').partition(' ')
tag = line[0]
line_value = line[2]
except:
continue
token = GedcomTokens.TOKENS.get(line[1], GedcomTokens.TOKEN_UNKNOWN)
data = (level, token, line[2], line[1], self.index)
token = GedcomTokens.TOKENS.get(tag, GedcomTokens.TOKEN_UNKNOWN)
data = (level, token, line_value, tag, self.index)
func = self.func_map.get(data[1])
if func:
+13 -129
View File
@@ -329,7 +329,6 @@ class GedcomParser(UpdateCallback):
TOKEN_RELI : self.__person_reli,
TOKEN_ADOP : self.__person_adop,
TOKEN_DEAT : self.__person_deat,
TOKEN_RESI : self.__person_resi,
# +1 <<INDIVIDUAL_ATTRIBUTE_STRUCTURE>> {0:M}
# +1 AFN <ANCESTRAL_FILE_NUMBER> {0:1}
TOKEN_ATTR : self.__person_std_attr,
@@ -410,6 +409,8 @@ class GedcomParser(UpdateCallback):
TOKEN_NAME : self.__repo_name,
TOKEN_ADDR : self.__repo_addr,
TOKEN_RIN : self.__ignore,
TOKEN_NOTE : self.__repo_note,
TOKEN_RNOTE : self.__repo_note,
}
self.event_parse_tbl = {
@@ -498,22 +499,6 @@ class GedcomParser(UpdateCallback):
TOKEN_STAT : self.__ignore,
}
self.resi_parse_tbl = {
TOKEN_DATE : self.__person_resi_date,
TOKEN_ADDR : self.__person_resi_addr,
TOKEN_SOUR : self.__person_resi_sour,
TOKEN_PLAC : self.__person_resi_plac,
TOKEN_PHON : self.__person_resi_phon,
TOKEN_NOTE : self.__person_resi_note,
TOKEN_RNOTE : self.__person_resi_note,
TOKEN_IGNORE : self.__ignore,
TOKEN_CAUS : self.__ignore,
TOKEN_STAT : self.__ignore,
TOKEN_TEMP : self.__ignore,
TOKEN_OBJE : self.__ignore,
TOKEN_TYPE : self.__ignore,
}
self.person_fact_parse_tbl = {
TOKEN_TYPE : self.__person_fact_type,
}
@@ -1153,7 +1138,6 @@ class GedcomParser(UpdateCallback):
elif key in ("REPO", "REPOSITORY"):
self.__parse_repo(line)
elif key in ("SUBM", "SUBN", "SUBMITTER"):
print line
self.__skip_subordinate_levels(1)
elif line.token in (TOKEN_SUBM, TOKEN_SUBN, TOKEN_IGNORE):
self.__skip_subordinate_levels(1)
@@ -1161,7 +1145,6 @@ class GedcomParser(UpdateCallback):
self.__parse_source(line.token_text, 1)
elif line.data.startswith("SOUR ") or \
line.data.startswith("SOURCE "):
print line
# A source formatted in a single line, for example:
# 0 @S62@ SOUR This is the title of the source
source = self.__find_or_create_source(self.sid_map[line[3]])
@@ -1816,115 +1799,6 @@ class GedcomParser(UpdateCallback):
sref = self.handle_source(line, state.level)
state.name.add_source_reference(sref)
def __person_resi(self, line, state):
"""
The RESI tag follows the EVENT_DETAIL structure, which is:
n TYPE <EVENT_DESCRIPTOR> {0:1}
n DATE <DATE_VALUE> {0:1}
n <<PLACE_STRUCTURE>> {0:1}
n <<ADDRESS_STRUCTURE>> {0:1}
n AGE <AGE_AT_EVENT> {0:1}
n AGNC <RESPONSIBLE_AGENCY> {0:1}
n CAUS <CAUSE_OF_EVENT> {0:1}
n <<SOURCE_CITATION>> {0:M}
n <<MULTIMEDIA_LINK>> {0:M}
n <<NOTE_STRUCTURE>> {0:M}
Currently, the TYPE, AGE, CAUSE, STAT, and other tags which
do not apply to an address are ignored.
@param line: The current line in GedLine format
@type line: GedLine
@param state: The current state
@type state: CurrentState
"""
addr = gen.lib.Address()
sub_state = GedcomUtils.CurrentState()
sub_state.person = state.person
sub_state.level = state.level+1
sub_state.addr = addr
sub_state.person.add_address(addr)
self.__parse_level(sub_state, self.resi_parse_tbl, self.__undefined)
def __person_resi_date(self, line, state):
"""
Set the date on the address associated with and Address.
@param line: The current line in GedLine format
@type line: GedLine
@param state: The current state
@type state: CurrentState
"""
state.addr.set_date_object(line.data)
def __person_resi_addr(self, line, state):
"""
Parses the ADDR line of a RESI tag
@param line: The current line in GedLine format
@type line: GedLine
@param state: The current state
@type state: CurrentState
"""
state.addr.set_street(line.data)
sub_state = GedcomUtils.CurrentState()
sub_state.addr = state.addr
sub_state.level = state.level + 1
sub_state.person = state.person
self.__parse_level(sub_state, self.parse_addr_tbl, self.__ignore)
def __person_resi_sour(self, line, state):
"""
Parses the source connected to a RESI tag
@param line: The current line in GedLine format
@type line: GedLine
@param state: The current state
@type state: CurrentState
"""
state.addr.add_source_reference(self.handle_source(line, state.level))
def __person_resi_plac(self, line, state):
"""
Parses the PLAC tag connected to a RESI tag
@param line: The current line in GedLine format
@type line: GedLine
@param state: The current state
@type state: CurrentState
"""
state.addr.set_street(line.data)
self.__parse_level(state, self.parse_addr_tbl, self.__ignore)
def __person_resi_phon(self, line, state):
"""
Parses the source connected to a PHON tag
@param line: The current line in GedLine format
@type line: GedLine
@param state: The current state
@type state: CurrentState
"""
if state.addr.get_street() == "":
state.addr.set_street("Unknown")
state.addr.set_phone(line.data)
def __person_resi_note(self, line, state):
"""
Parses the NOTE connected to a RESI tag
@param line: The current line in GedLine format
@type line: GedLine
@param state: The current state
@type state: CurrentState
"""
self.__parse_note(line, state.addr, state.level+1)
def __ignore(self, line, state):
"""
Ignores an unsupported tag
@@ -3876,6 +3750,15 @@ class GedcomParser(UpdateCallback):
"""
state.repo.set_name(line.data)
def __repo_note(self, line, state):
"""
@param line: The current line in GedLine format
@type line: GedLine
@param state: The current state
@type state: CurrentState
"""
self.__parse_note(line, state.repo, state.level+1)
def __repo_addr(self, line, state):
"""
n ADDR <ADDRESS_LINE> {0:1}
@@ -4301,7 +4184,8 @@ class GedcomParser(UpdateCallback):
photo = self.dbase.get_object_from_handle(photo_handle)
oref = gen.lib.MediaRef()
oref.set_reference_handle(photo.handle)
oref.add_note(note)
if note:
oref.add_note(self.__find_note_handle(self.nid_map[note]))
obj.add_media_reference(oref)
def __build_event_pair(self, state, event_type, event_map, description):
+1 -2
View File
@@ -206,8 +206,7 @@ TOKENS = {
"QUALITY_OF_DATA": TOKEN_QUAY, "REFN" : TOKEN_REFN,
"REFERENCE" : TOKEN_REFN, "RELI" : TOKEN_RELI,
"RELIGION" : TOKEN_RELI, "REPO" : TOKEN_REPO,
"REPOSITORY" : TOKEN_REPO, "RESI" : TOKEN_RESI,
"RESIDENCE" : TOKEN_RESI, "RFN" : TOKEN_RFN,
"REPOSITORY" : TOKEN_REPO, "RFN" : TOKEN_RFN,
"RIN" : TOKEN_RIN, "_SCHEMA" : TOKEN__SCHEMA,
"SEX" : TOKEN_SEX, "SCHEMA" : TOKEN__SCHEMA,
"SLGC" : TOKEN_SLGC, "SLGS" : TOKEN_SLGS,
+25 -2
View File
@@ -417,7 +417,7 @@ class GrampsBSDDB(GrampsDbBase, UpdateCallback):
# These env settings are only needed for Txn environment
self.env.set_lk_max_locks(25000)
self.env.set_lk_max_objects(25000)
self.env.set_flags(db.DB_LOG_AUTOREMOVE, 1) # clean up unused logs
self.set_auto_remove() # clean up unused logs
# The DB_PRIVATE flag must go if we ever move to multi-user setup
env_flags = db.DB_CREATE | db.DB_PRIVATE | \
@@ -2378,7 +2378,30 @@ class GrampsBSDDB(GrampsDbBase, UpdateCallback):
print name, obj
# Return the required tuple
return (new_obj, note_handles)
def set_auto_remove(self):
"""
BSDDB change log settings using new method with renamed attributes
"""
if db.version() < (4, 7):
# by the book: old method with old attribute
self.env.set_flags(db.DB_LOG_AUTOREMOVE, 1)
else: # look at python interface
# TODO test with new version of pybsddb
try:
# try numeric compare, just first 2 digits
# this won't work with something like "4.10a", but
# hopefully they won't do that
old_version = map(int, db.__version__.split(".",2)[:2]) < (4, 7)
except:
# fallback, weak string compare
old_version = db.__version__ < "4.7"
if old_version:
# undocumented: old method with new attribute
self.env.set_flags(db.DB_LOG_AUTO_REMOVE, 1)
else:
# by the book: new method with new attribute
self.env.log_set_config(db.DB_LOG_AUTO_REMOVE, 1)
class BdbTransaction(Transaction):
def __init__(self, msg, db, batch=False, no_magic=False):
+2 -2
View File
@@ -377,7 +377,7 @@ class GrampsDbXmlWriter(UpdateCallback):
for number, name,fmt_str,active in self.db.name_formats:
self.g.write('%s<format number="%d" name="%s" '
'fmt_str="%s" active="%d"/>\n'
% (' ', number, name,fmt_str,int(active)) )
% (' ', number, name, fmt_str, int(active)))
self.g.write(" </name-formats>\n")
def fix(self,line):
@@ -1113,4 +1113,4 @@ def conf_priv(obj):
#
#-------------------------------------------------------------------------
# Don't export a writer for plugins, that is the task of _WriteXML.py
# Don't export a writer for plugins, that is the task of _WriteXML.py
+4
View File
@@ -1330,6 +1330,10 @@ class GrampsParser(UpdateCallback):
self.info.add('merge-overwrite', NOTE_KEY, self.note)
self.note.format = int(attrs.get('format', gen.lib.Note.FLOWED))
self.note.type.set_from_xml_str(attrs['type'])
if attrs.get('complete'): # this is only true for complete=1
self.note.marker.set(gen.lib.MarkerType.COMPLETE)
else:
self.note.marker.set_from_xml_str(attrs.get("marker", ''))
else:
# GRAMPS LEGACY: old notes that were written inside other objects
# We need to create a top-level note, it's type depends on
+2 -5
View File
@@ -945,12 +945,9 @@ class GedcomWriter(BasicUtils.UpdateCallback):
self.__writeln(1, val, 'Y')
if event.get_type() == gen.lib.EventType.MARRIAGE:
ftype = family.get_relationship()
if ftype != gen.lib.FamilyRelType.MARRIED and str(ftype):
self.__writeln(2, 'TYPE', str(ftype))
self.__family_event_attrs(event.get_attribute_list(), 2)
elif event.get_description().strip() != "":
if event.get_description().strip() != "":
self.__writeln(2, 'TYPE', event.get_description())
else:
self.__writeln(1, 'EVEN')
+3
View File
@@ -141,6 +141,9 @@ def conv_lat_lon(latitude, longitude, format="D.D4"):
if len(l) < 2 or len(l) > 3:
error = True
l[0]=l[0].strip()
# if no characters to the left of ':', nothing useful is input
if len(l[0]) == 0:
return None
if l[0][0] == '-':
sign = '-'
l[0]=l[0][1:]
+1 -1
View File
@@ -1252,7 +1252,7 @@ class ScratchPadWindow(ManagedWindow.ManagedWindow):
def on_help_clicked(self, obj):
"""Display the relevant portion of GRAMPS manual"""
GrampsDisplay.help(webpage=WIKI_HELP_PAGE, section=WIKI_HELP_SEC)
GrampsDisplay.help('scratchpad', webpage=WIKI_HELP_PAGE, section=WIKI_HELP_SEC)
def on_clear_clicked(self, obj):
"""Deletes the selected object from the object list"""
+35 -8
View File
@@ -29,6 +29,7 @@
#
#------------------------------------------------------------------------
from math import radians
from xml.sax.saxutils import escape
#------------------------------------------------------------------------
#
@@ -1083,16 +1084,16 @@ class CairoDoc(BaseDoc.BaseDoc, BaseDoc.TextDoc, BaseDoc.DrawDoc):
self._active_element.add_child(GtkDocPagebreak())
def start_bold(self):
self.write_text('<b>')
self.__write_text('<b>', markup=True)
def end_bold(self):
self.write_text('</b>')
self.__write_text('</b>', markup=True)
def start_superscript(self):
self.write_text('<small><sup>')
self.__write_text('<small><sup>', markup=True)
def end_superscript(self):
self.write_text('</sup></small>')
self.__write_text('</sup></small>', markup=True)
def start_paragraph(self, style_name, leader=None):
style_sheet = self.get_style_sheet()
@@ -1142,6 +1143,10 @@ class CairoDoc(BaseDoc.BaseDoc, BaseDoc.TextDoc, BaseDoc.DrawDoc):
self._active_element = self._active_element.get_parent()
def write_note(self, text, format, style_name):
"""
Method to write the note objects text on a
Document
"""
if format == 1:
for line in text.split('\n'):
self.start_paragraph(style_name)
@@ -1155,11 +1160,30 @@ class CairoDoc(BaseDoc.BaseDoc, BaseDoc.TextDoc, BaseDoc.DrawDoc):
self.write_text(line)
self.end_paragraph()
def write_text(self, text, mark=None):
# FIXME this is ugly, do we really need it?
text = text.replace('<super>', '<small><sup>')
text = text.replace('</super>', '</sup></small>')
def __write_text(self, text, mark=None, markup=False):
"""
@param text: text to write.
@param mark: IndexMark to use for indexing (if supported)
@param markup: True if text already contains markup info.
Then text will no longer be escaped
Private method: reports should not add markup in text to override
the style
"""
if not markup:
# We need to escape the text here for later pango.Layout.set_markup
# calls. This way we save the markup created by the report
# The markup in the note editor is not in the text so is not
# considered. It must be added by pango too
text = escape(text)
self._active_element.add_text(text)
def write_text(self, text, mark=None):
"""Write a normal piece of text according to the
present style
@param text: text to write.
@param mark: IndexMark to use for indexing (if supported)
"""
self. __write_text(text, mark)
def add_media_object(self, name, pos, x_cm, y_cm):
new_image = GtkDocPicture(pos, name, x_cm, y_cm)
@@ -1277,6 +1301,9 @@ class CairoDoc(BaseDoc.BaseDoc, BaseDoc.TextDoc, BaseDoc.DrawDoc):
self._available_height = page_height
# try to fit the next element to current page, divide it if needed
if not self._elements_to_paginate:
#this is a self._doc where nothing has been added. Empty page.
return True
elem = self._elements_to_paginate.pop(0)
(e1, e2), e1_h = elem.divide(layout,
page_width,
+8 -2
View File
@@ -595,8 +595,14 @@ class GtkPrint(CairoDoc):
# give a dummy cairo context to gtk.PrintContext,
# PrintPreview will update it with the real one
width = int(round(context.get_width()))
height = int(round(context.get_height()))
try:
width = int(round(context.get_width()))
except ValueError:
width = 0
try:
height = int(round(context.get_height()))
except ValueError:
height = 0
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
cr = cairo.Context(surface)
context.set_cairo_context(cr, PRINTER_DPI, PRINTER_DPI)
+1 -3
View File
@@ -23,11 +23,9 @@ docgen_PYTHON = \
TextBufDoc.py \
GtkPrint.py
docgen_DATA = \
dist_docgen_DATA = \
gtkprintpreview.glade
dist_docgen_DATA = $(docgen_DATA)
# Clean up all the byte-compiled files
MOSTLYCLEANFILES = *pyc *pyo
+11 -1
View File
@@ -100,12 +100,22 @@ class Attribute(SecondaryObject, PrivacyBase, SourceBase, NoteBase):
"""
return self.source_list
def get_note_child_list(self):
"""
Return the list of child secondary objects that may refer notes.
@return: Returns the list of child secondary child objects that may
refer notes.
@rtype: list
"""
return self.source_list
def get_handle_referents(self):
"""
Return the list of child objects which may, directly or through
their children, reference primary objects.
@return: Returns the list of objects refereincing primary objects.
@return: Returns the list of objects referencing primary objects.
@rtype: list
"""
return self.source_list
+14
View File
@@ -895,14 +895,28 @@ class Date:
year = max(value[Date._POS_YR], 1)
month = max(value[Date._POS_MON], 1)
day = max(value[Date._POS_DAY], 1)
if year == 0 and month == 0 and day == 0:
self.sortval = 0
else:
func = Date._calendar_convert[calendar]
self.sortval = func(year, month, day)
if self.get_slash() and self.get_calendar() != Date.CAL_JULIAN:
self.set_calendar(Date.CAL_JULIAN)
self.recalc_sort_value()
if text:
self.text = text
def recalc_sort_value(self):
"""
Recalculates the numerical sort value associated with the date
and returns it. Public method.
"""
self._calc_sort_value()
return self.sortval
def _calc_sort_value(self):
"""
Calculate the numerical sort value associated with the date.
+5 -4
View File
@@ -259,7 +259,8 @@ class Family(SourceBase, NoteBase, MediaBase, AttributeBase, LdsOrdBase,
@rtype: list
"""
check_list = self.media_list + self.attribute_list + \
self.lds_ord_list + self.child_ref_list
self.lds_ord_list + self.child_ref_list + \
self.event_ref_list
return check_list
def get_note_child_list(self):
@@ -271,7 +272,8 @@ class Family(SourceBase, NoteBase, MediaBase, AttributeBase, LdsOrdBase,
@rtype: list
"""
check_list = self.media_list + self.attribute_list + \
self.lds_ord_list + self.child_ref_list + self.source_list
self.lds_ord_list + self.child_ref_list + self.source_list + \
self.event_ref_list
return check_list
def get_referenced_handles(self):
@@ -283,7 +285,6 @@ class Family(SourceBase, NoteBase, MediaBase, AttributeBase, LdsOrdBase,
@rtype: list
"""
ret = self.get_referenced_note_handles()
ret += [('Event', ref.ref) for ref in self.event_ref_list]
ret += [('Person', handle) for handle
in ([ref.ref for ref in self.child_ref_list] +
[self.father_handle, self.mother_handle])
@@ -298,7 +299,7 @@ class Family(SourceBase, NoteBase, MediaBase, AttributeBase, LdsOrdBase,
@return: Returns the list of objects refereincing primary objects.
@rtype: list
"""
return self.get_sourcref_child_list() + self.source_list
return self.get_sourcref_child_list() + self.source_list
def set_relationship(self, relationship_type):
"""
+1 -1
View File
@@ -153,7 +153,7 @@ class LivingProxyDb(ProxyDbBase):
If no such Person exists, None is returned.
"""
person = self.db.get_person_from_gramps_id(val)
if self.__is_living(person):
if person and self.__is_living(person):
if self.mode == self.MODE_EXCLUDE_ALL:
return None
else:
+2 -2
View File
@@ -66,8 +66,8 @@ def delete_person_from_database(db, person, trans):
for phandle in person_list:
p = db.get_person_from_handle(phandle)
p.remove_handle_references('Person', handle)
db.commit_person(person, trans)
p.remove_handle_references('Person', [handle])
db.commit_person(p, trans)
db.remove_person(handle, trans)
def remove_family_relationships(db, family_handle, trans=None):
+15 -16
View File
@@ -1847,7 +1847,6 @@
<widget class="GtkEntry" id="street">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="has_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
@@ -3061,7 +3060,7 @@
<property name="update_policy">GTK_UPDATE_ALWAYS</property>
<property name="snap_to_ticks">False</property>
<property name="wrap">False</property>
<property name="adjustment">0 0 100 1 10 10</property>
<property name="adjustment">0 0 100 1 10 0</property>
</widget>
<packing>
<property name="left_attach">1</property>
@@ -3806,7 +3805,7 @@
<property name="update_policy">GTK_UPDATE_ALWAYS</property>
<property name="snap_to_ticks">False</property>
<property name="wrap">False</property>
<property name="adjustment">0 -100 100 0.1 1 10</property>
<property name="adjustment">0 -100 100 0.1 1 0</property>
</widget>
<packing>
<property name="left_attach">2</property>
@@ -3827,7 +3826,7 @@
<property name="update_policy">GTK_UPDATE_ALWAYS</property>
<property name="snap_to_ticks">False</property>
<property name="wrap">False</property>
<property name="adjustment">2 -100 100 0.1 1 10</property>
<property name="adjustment">2 -100 100 0.1 1 0</property>
</widget>
<packing>
<property name="left_attach">2</property>
@@ -3848,7 +3847,7 @@
<property name="update_policy">GTK_UPDATE_ALWAYS</property>
<property name="snap_to_ticks">False</property>
<property name="wrap">False</property>
<property name="adjustment">0 -100 100 0.1 1 10</property>
<property name="adjustment">0 -100 100 0.1 1 0</property>
</widget>
<packing>
<property name="left_attach">2</property>
@@ -3869,7 +3868,7 @@
<property name="update_policy">GTK_UPDATE_ALWAYS</property>
<property name="snap_to_ticks">False</property>
<property name="wrap">False</property>
<property name="adjustment">0 -100 100 0.1 1 10</property>
<property name="adjustment">0 -100 100 0.1 1 0</property>
</widget>
<packing>
<property name="left_attach">2</property>
@@ -3890,7 +3889,7 @@
<property name="update_policy">GTK_UPDATE_ALWAYS</property>
<property name="snap_to_ticks">False</property>
<property name="wrap">False</property>
<property name="adjustment">0 -100 100 0.1 1 10</property>
<property name="adjustment">0 -100 100 0.1 1 0</property>
</widget>
<packing>
<property name="left_attach">2</property>
@@ -4006,7 +4005,7 @@
<property name="update_policy">GTK_UPDATE_ALWAYS</property>
<property name="snap_to_ticks">False</property>
<property name="wrap">False</property>
<property name="adjustment">0.2 0 100 0.1 1 10</property>
<property name="adjustment">0.2 0 100 0.1 1 0</property>
</widget>
<packing>
<property name="left_attach">2</property>
@@ -4691,7 +4690,7 @@
<property name="update_policy">GTK_UPDATE_ALWAYS</property>
<property name="snap_to_ticks">False</property>
<property name="wrap">False</property>
<property name="adjustment">0 0 100 1 10 10</property>
<property name="adjustment">0 0 100 1 10 0</property>
</widget>
<packing>
<property name="left_attach">4</property>
@@ -4713,7 +4712,7 @@
<property name="update_policy">GTK_UPDATE_ALWAYS</property>
<property name="snap_to_ticks">False</property>
<property name="wrap">False</property>
<property name="adjustment">0 0 100 1 10 10</property>
<property name="adjustment">0 0 100 1 10 0</property>
</widget>
<packing>
<property name="left_attach">2</property>
@@ -4823,7 +4822,7 @@
<property name="update_policy">GTK_UPDATE_ALWAYS</property>
<property name="snap_to_ticks">False</property>
<property name="wrap">False</property>
<property name="adjustment">0 0 100 1 10 10</property>
<property name="adjustment">0 0 100 1 10 0</property>
</widget>
<packing>
<property name="left_attach">2</property>
@@ -4845,7 +4844,7 @@
<property name="update_policy">GTK_UPDATE_ALWAYS</property>
<property name="snap_to_ticks">False</property>
<property name="wrap">False</property>
<property name="adjustment">0 0 100 1 10 10</property>
<property name="adjustment">0 0 100 1 10 0</property>
</widget>
<packing>
<property name="left_attach">4</property>
@@ -6718,7 +6717,7 @@
<child>
<widget class="GtkCheckButton" id="use_always">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">If you check this button, all the missing media files will be automatically treated according to the currently selected option. No further dialogs will be presented for any missing medial files.</property>
<property name="tooltip" translatable="yes">If you check this button, all the missing media files will be automatically treated according to the currently selected option. No further dialogs will be presented for any missing media files.</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">_Use this selection for all missing media files</property>
<property name="use_underline">True</property>
@@ -9584,7 +9583,7 @@
<property name="update_policy">GTK_UPDATE_ALWAYS</property>
<property name="snap_to_ticks">False</property>
<property name="wrap">False</property>
<property name="adjustment">0 0 31 1 10 10</property>
<property name="adjustment">0 0 31 1 10 0</property>
</widget>
<packing>
<property name="left_attach">1</property>
@@ -9623,7 +9622,7 @@
<property name="update_policy">GTK_UPDATE_ALWAYS</property>
<property name="snap_to_ticks">False</property>
<property name="wrap">False</property>
<property name="adjustment">0 -9999 99999 1 10 10</property>
<property name="adjustment">0 -9999 99999 1 10 0</property>
</widget>
<packing>
<property name="left_attach">3</property>
@@ -9760,7 +9759,7 @@
<property name="update_policy">GTK_UPDATE_ALWAYS</property>
<property name="snap_to_ticks">False</property>
<property name="wrap">False</property>
<property name="adjustment">0 0 31 1 10 10</property>
<property name="adjustment">0 0 31 1 10 0</property>
</widget>
<packing>
<property name="left_attach">5</property>
+109 -21
View File
@@ -20,6 +20,7 @@ import sys
import re
import urllib
import posixpath
import cgi
from BasicUtils import name_displayer
from DataViews import register, Gramplet
@@ -467,9 +468,22 @@ class PedigreeGramplet(Gramplet):
_("Right-click name to edit person")
self.set_use_markup(True)
self.max_generations = 100
#self.set_option("max_generations",
# NumberOption(_("Maximum generations"),
# 100, -1, 500))
self.show_dates = 1
self.box_mode = "ASCII"
def on_load(self):
if len(self.gui.data) > 0:
self.max_generations = int(self.gui.data[0])
if len(self.gui.data) > 1:
self.show_dates = int(self.gui.data[1])
if len(self.gui.data) > 2:
self.box_mode = self.gui.data[2] # ASCII or UTF
# in case we need it:
tag = self.gui.buffer.create_tag("fixed")
tag.set_property("font", "Courier 9")
def on_save(self):
self.gui.data = [self.max_generations, self.show_dates, self.box_mode]
def db_changed(self):
"""
@@ -487,20 +501,33 @@ class PedigreeGramplet(Gramplet):
self.update()
def get_boxes(self, generation, what):
retval = ""
retval = u""
if self.box_mode == "UTF":
space = u" "
elif self.box_mode == "ASCII":
space = u" "
space_len = len(space) + 2
for i in range(generation+1):
if self._boxes[i]:
retval += " |"
retval += space + u"|"
else:
retval += " "
if retval[-1] == ' ':
retval += space + u" "
if retval[-1] == u' ':
if what == 'sf':
retval = retval[:-6] + " /"
retval = retval[:-space_len] + u"/"
elif what == 'sm':
retval = retval[:-6] + " \\"
elif retval.endswith("| |"):
retval = retval[:-6] + "+"
return retval + "---"
retval = retval[:-space_len] + u"\\"
elif retval.endswith(u"|" + space + u"|"):
retval = retval[:-space_len] + u"+"
if self.box_mode == "UTF":
retval += u"-"
retval = retval.replace(u"\\", u"\u2514")
retval = retval.replace(u"-", u"\u2500")
retval = retval.replace(u"|", u"\u2502")
retval = retval.replace(u"/", u"\u250c")
elif self.box_mode == "ASCII":
retval += u"--"
return retval
def set_box(self, pos, value):
self._boxes[pos] = value
@@ -525,19 +552,35 @@ class PedigreeGramplet(Gramplet):
elif what[0] == "s":
boxes = self.get_boxes(generation, what)
if what[-1] == 'f':
boxes = boxes.replace("+", "/")
if self.box_mode == "UTF":
boxes = boxes.replace("+", u"\u250c")
else:
boxes = boxes.replace("+", u"/")
else:
boxes = boxes.replace("+", "\\")
if self.box_mode == "UTF":
boxes = boxes.replace("+", u"\u2514")
else:
boxes = boxes.replace("+", u"\\")
self.append_text(boxes)
self.link(name_displayer.display_name(person.get_primary_name()),
'Person', person.handle)
'Person', person.handle,
tooltip=_("Click to make active\n") + \
_("Right-click to edit"))
if self.show_dates:
self.append_text(" ")
self.render_text(self.info_string(person))
self.append_text("\n")
if generation not in self._generations:
self._generations[generation] = []
self._generations[generation].append(handle)
elif what == "a":
self.append_text("o------")
self.render_text("<b>%s</b>" % name_displayer.display_name(person.get_primary_name()))
if self.box_mode == "UTF":
self.append_text(u"o" + (u"\u2500" * 3))
elif self.box_mode == "ASCII":
self.append_text(u"o---")
self.append_text("%s " % name_displayer.display_name(person.get_primary_name()))
if self.show_dates:
self.render_text(self.info_string(person))
self.append_text("\n")
if generation not in self._generations:
self._generations[generation] = []
@@ -553,11 +596,49 @@ class PedigreeGramplet(Gramplet):
self.process_person(mother, generation + 1, "m")
self.set_box(generation, 0) # regardless, turn off line if on
def info_string(self, person):
birth = ReportUtils.get_birth_or_fallback(self.dbstate.db, person)
if birth and birth.get_type != gen.lib.EventType.BIRTH:
sdate = DateHandler.get_date(birth)
if sdate:
bdate = "<i>%s</i>" % cgi.escape(sdate)
else:
bdate = ""
elif birth:
bdate = cgi.escape(DateHandler.get_date(birth))
else:
bdate = ""
death = ReportUtils.get_death_or_fallback(self.dbstate.db, person)
if death and death.get_type != gen.lib.EventType.DEATH:
sdate = DateHandler.get_date(death)
if sdate:
ddate = "<i>%s</i>" % cgi.escape(sdate)
else:
ddate = ""
elif death:
ddate = cgi.escape(DateHandler.get_date(death))
else:
ddate = ""
if bdate and ddate:
value = _("(b. %(birthdate)s, d. %(deathdate)s)") % {
'birthdate' : bdate,
'deathdate' : ddate
}
elif bdate:
value = _("(b. %s)") % (bdate)
elif ddate:
value = _("(d. %s)") % (ddate)
else:
value = ""
return value
def main(self): # return false finishes
"""
Generator which will be run in the background.
"""
self._boxes = [0] * self.max_generations
self._boxes = [0] * (self.max_generations + 1)
self._generations = {}
self.gui.buffer.set_text("")
active_person = self.dbstate.get_active_person()
@@ -577,15 +658,22 @@ class PedigreeGramplet(Gramplet):
handles = self._generations[g]
self.append_text(" ")
if g == 0:
self.link(_("Generation 1"), 'PersonList', handles)
self.link(_("Generation 1"), 'PersonList', handles,
tooltip=_("Double-click to see people in generation"))
self.append_text(_(" has 1 of 1 individual (100.00% complete)\n"))
else:
all.extend(handles)
self.link(_("Generation %d") % g, 'PersonList', handles)
self.link(_("Generation %d") % g, 'PersonList', handles,
tooltip=_("Double-click to see people in generation"))
self.append_text(_(" has %d of %d individuals (%.2f%% complete)\n") %
(count, 2**(g-1), float(count)/2**(g-1) * 100))
self.link(_("All generations"), 'PersonList', all)
self.link(_("All generations"), 'PersonList', all,
tooltip=_("Double-click to see all generations"))
self.append_text(_(" have %d individuals\n") % len(all))
# Set to a fixed font
if self.box_mode == "UTF":
start, end = self.gui.buffer.get_bounds()
self.gui.buffer.apply_tag_by_name("fixed", start, end)
self.append_text("", scroll_to="begin")
class StatsGramplet(Gramplet):
+4 -1
View File
@@ -227,7 +227,10 @@ class DescendTree(Report):
def write_report(self):
(maxy,maxx) = self.genchart.dimensions()
maxx = (maxx-1)*2
if maxx <> 1:
maxx = (maxx-1)*2
else:
maxx = 1
maxh = int((self.uh-0.75)/(self.box_height*1.25))
if self.force_fit:
+16 -17
View File
@@ -164,12 +164,12 @@ class DetAncestorReport(Report):
self.doc.page_break()
self.doc.start_paragraph("DAR-Generation")
text = _("Generation %d") % (generation+1)
mark = BaseDoc.IndexMark(text,BaseDoc.INDEX_TYPE_TOC,2)
self.doc.write_text(text,mark)
mark = BaseDoc.IndexMark(text, BaseDoc.INDEX_TYPE_TOC, 2)
self.doc.write_text(text, mark)
self.doc.end_paragraph()
generation = generation + 1
if self.childref:
self.prev_gen_handles= self.gen_handles.copy()
self.prev_gen_handles = self.gen_handles.copy()
self.gen_handles.clear()
person_handle = self.map[key]
@@ -181,7 +181,8 @@ class DetAncestorReport(Report):
for family_handle in person.get_family_handle_list():
family = self.database.get_family_from_handle(family_handle)
mother_handle = family.get_mother_handle()
if mother_handle == None or \
if mother_handle == None or \
mother_handle not in self.map.values() or \
person.get_gender() == gen.lib.Person.FEMALE:
if self.listchildren:
self.write_children(family)
@@ -376,28 +377,26 @@ class DetAncestorReport(Report):
self.doc.start_paragraph('DAR-MoreDetails')
evtName = str( event.get_type() )
if date and place:
text += _('%(event_name)s: %(date)s, %(place)s') % {
'event_name' : _(evtName),
'date' : date,
'place' : place }
text += _('%(date)s, %(place)s') % {
'date' : date, 'place' : place }
elif date:
text += _('%(event_name)s: %(date)s') % {
'event_name' : _(evtName),
'date' : date}
text += _('%(date)s') % {'date' : date}
elif place:
text += _('%(event_name)s: %(place)s') % {
'event_name' : _(evtName),
'place' : place }
else:
text += _('%(event_name)s: ') % {'event_name' : _(evtName)}
text += _('%(place)s') % { 'place' : place }
if event.get_description():
if text:
text += ". "
text += event.get_description()
text += self.endnotes(event)
if text:
text += _('%(endnotes)s.') % { 'endnotes' : self.endnotes(event) }
text += ". "
text = _('%(event_name)s: %(event_text)s') % {
'event_name' : _(evtName),
'event_text' : text }
self.doc.write_text(text)
+16 -17
View File
@@ -276,30 +276,29 @@ class DetDescendantReport(Report):
self.doc.start_paragraph('DDR-MoreDetails')
evtName = str( event.get_type() )
if date and place:
text += _('%(event_name)s: %(date)s, %(place)s') % {
'event_name' : _(evtName),
'date' : date,
'place' : place }
text += _('%(date)s, %(place)s') % {
'date' : date, 'place' : place }
elif date:
text += _('%(event_name)s: %(date)s') % {
'event_name' : _(evtName),
'date' : date}
text += _('%(date)s') % {'date' : date}
elif place:
text += _('%(event_name)s: %(place)s') % {
'event_name' : _(evtName),
'place' : place }
else:
text += _('%(event_name)s: ') % {'event_name' : _(evtName)}
text += _('%(place)s') % { 'place' : place }
if event.get_description():
if text and (date or place):
if text:
text += ". "
text += event.get_description()
text += "%s. " % self.endnotes(event)
text += self.endnotes(event)
if text:
text += ". "
text = _('%(event_name)s: %(event_text)s') % {
'event_name' : _(evtName),
'event_text' : text }
self.doc.write_text(text)
if self.inc_attrs:
text = ""
attr_list = event.get_attribute_list()
+1 -1
View File
@@ -367,7 +367,7 @@ class FanChartOptions(MenuReportOptions):
RADIAL_UPRIGHT )
radial.add_item(RADIAL_UPRIGHT,_('upright'))
radial.add_item(RADIAL_ROUNDABOUT,_('roundabout'))
radial.set_help(_("Print raidal texts upright or roundabout"))
radial.set_help(_("Print radial texts upright or roundabout"))
menu.add_option(category_name,"radial",radial)
def make_default_style(self,default_style):
+5
View File
@@ -187,6 +187,11 @@ class RelGraphReport(Report):
style = 'solid'
adopted = ((int(frel) != gen.lib.ChildRefType.BIRTH) or
(int(mrel) != gen.lib.ChildRefType.BIRTH))
# If birth relation to father is NONE, mening there is no father and
# if birth relation to mother is BIRTH then solid line
if ((int(frel) == gen.lib.ChildRefType.NONE) and
(int(mrel) == gen.lib.ChildRefType.BIRTH)):
adopted = False
if adopted and self.adoptionsdashed:
style = 'dotted'
self.doc.add_link( p_id, family.get_gramps_id(), style,
+4 -4
View File
@@ -503,9 +503,9 @@ class CSVParser:
if gender:
# replace
gender = gender.lower()
if gender == gender_map[gen.lib.Person.MALE]:
if gender == gender_map[gen.lib.Person.MALE].lower():
gender = gen.lib.Person.MALE
elif gender == gender_map[gen.lib.Person.FEMALE]:
elif gender == gender_map[gen.lib.Person.FEMALE].lower():
gender = gen.lib.Person.FEMALE
else:
gender = gen.lib.Person.UNKNOWN
@@ -627,9 +627,9 @@ class CSVParser:
person.gramps_id = person_ref[1:-1]
if person.get_gender() == gen.lib.Person.UNKNOWN and gender != None:
gender = gender.lower()
if gender == gender_map[gen.lib.Person.MALE]:
if gender == gender_map[gen.lib.Person.MALE].lower():
gender = gen.lib.Person.MALE
elif gender == gender_map[gen.lib.Person.FEMALE]:
elif gender == gender_map[gen.lib.Person.FEMALE].lower():
gender = gen.lib.Person.FEMALE
else:
gender = gen.lib.Person.UNKNOWN
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -523,7 +523,7 @@ class Convert2Abs(BatchOp):
class Convert2Rel(BatchOp):
title = _('Convert paths from absolute to r_elative')
description = _('This tool allows converting absolute media paths '
'to the a relative path. The relative path is relative '
'to a relative path. The relative path is relative '
'viz-a-viz the base path as given in the Preferences, '
'or if that is not set, your home directory. '
'A relative path allows to tie the file location to a '
+7 -7
View File
@@ -410,7 +410,7 @@ class BasePage:
of.write('<div id="Header">\n')
value = _dp.parse(time.strftime('%b %d %Y'))
value = _dp.parse(time.strftime('%Y-%m-%d'))
value = _dd.display(value)
msg = _('Generated by <a href="http://gramps-project.org">'
@@ -975,19 +975,19 @@ class IndividualListPage(BasePage):
#------------------------------------------------------------------------
class SurnamePage(BasePage):
def __init__(self, db, title, person_handle_list, options, archive, media_list):
def __init__(self, db, title, surname, person_handle_list, options, archive, media_list):
BasePage.__init__(self, title, options, archive, media_list, "")
of = self.create_link_file(md5(title).hexdigest(),'srn')
self.display_header(of,db,title,get_researcher().get_name(),True)
of = self.create_link_file(md5(surname).hexdigest(),'srn')
self.display_header(of, db, "%s - %s" % (_('Surname'), surname), get_researcher().get_name(), True)
msg = _("This page contains an index of all the individuals in the "
"database with the surname of %s. Selecting the person&#8217;s name "
"will take you to that person&#8217;s individual page.") % title
"will take you to that person&#8217;s individual page.") % surname
of.write('\t<h2>Surnames:</h2>\n')
of.write('\t<h3>%s</h3>\n' % html_escape(title))
of.write('\t<h3>%s</h3>\n' % html_escape(surname))
of.write('\t<p id="description">%s</p>\n' % msg)
of.write('\t<table class="infolist surname">\n')
of.write('\t<thead>\n')
@@ -2816,7 +2816,7 @@ class NavWebReport(Report):
self.photo_list, SurnameListPage.ORDER_BY_COUNT,"surnames_count")
for (surname, handle_list) in local_list:
SurnamePage(self.database, surname, handle_list,
SurnamePage(self.database, self.title, surname, handle_list,
self.opts, archive, self.photo_list)
self.progress.step()
+1 -1
View File
@@ -219,7 +219,7 @@ class PatchNames(Tool.BatchTool, ManagedWindow.ManagedWindow):
self.prefix1_hash = {}
self.prefix2_hash = {}
self.progress.set_pass(_('Bulding display'),
self.progress.set_pass(_('Building display'),
len(self.nick_list)+len(self.title_list)
+len(self.prefix1_list)+len(self.prefix2_list))
+1 -1
View File
@@ -329,7 +329,7 @@ class AllRelReport():
else:
sdoc.header1(_("Remarks"))
sdoc.paragraph("")
sdoc.paragraph(_("The following problems where encountered:"))
sdoc.paragraph(_("The following problems were encountered:"))
for msg in msg_list :
sdoc.paragraph(msg)