Compare commits

...

145 Commits

Author SHA1 Message Date
romjerome 1f614bd76f Add files via upload 2021-04-04 09:10:22 +02:00
Leonhaeuser 0442c34258 Some small fixes in German translation 2021-03-21 00:18:46 +01:00
Leonhaeuser c903f5e5a5 Update German translation for csv import/export 2021-03-11 22:59:42 +01:00
Leonhaeuser 3329860f50 small fix in German translation 2021-03-01 23:21:46 +01:00
Matthias Kemmer e7401f3aaa Change category of 'MatchesEventFilter' (#1130) 2021-02-19 11:45:38 -06:00
Paul Culley 1a48e8a03e Fix issue where separator between top and bottom bar of View creeps up. (#1122)
Fixes #11973
2021-02-19 11:44:32 -06:00
Paul Culley 9a4adab9d6 Fix Locations Gramplet (Enclosed by) to properly displaycertain nested places. (#1127)
when the smallest place has undated enclosure and larger places are dated.

Issue #11691
2021-02-19 11:32:33 -06:00
Paul Culley bb0647274b Fix Family Tree Manager drop error on Windows (#1132)
Fixes #10734
2021-02-19 11:31:43 -06:00
Paul Culley f6bfb46fc0 Fix exportvcalendar error is "is not" with a literal (Python 3.8 issue) (#1135)
Fixes #12000
2021-02-19 11:31:06 -06:00
Serge Noiraud b6fa5da8ee Handle not found when copying source from the (#1175)
Citation tree

Fixes #12170
2021-02-19 11:25:02 -06:00
Paul Culley 14c2d0e1b6 DbLoader: Fix call to 'file' function, which doesn't exist in Python3 (#1173) 2021-02-19 11:23:47 -06:00
Paul Culley 226e8c549a Fix write_lock_file exception when USERNAME is missing (#1171)
Fixes #12150
2021-02-19 11:23:06 -06:00
Paul Culley d173809d8c Fix EditPlace so Tab key doesn't get stuck on Private icon (#1168)
Fixes #12139
2021-02-19 11:22:35 -06:00
Paul Culley 63c52fa1bb Fix Tag report for places that have a hierarchy. (#1162)
Fixes #12124
2021-02-19 11:21:11 -06:00
Paul Culley 455628d44a Fix exception when cancelling out of a db upgrade in GUI (#1154)
Fixes #12063
2021-02-19 11:18:18 -06:00
Leonhaeuser 670bb355cb additional small German translation fixes 2021-02-12 21:36:51 +01:00
Leonhaeuser 202c7a9bf6 Small fixes German translation 2021-02-11 12:06:22 +01:00
Leonhaeuser 72955840f1 fix wrong translation of source text in German translation 2021-02-06 22:06:22 +01:00
Leonhaeuser b8e73d5ee1 fixed small error in German translation 2021-02-06 00:04:33 +01:00
Leonhaeuser 990db39664 small fixes German translation 2021-01-26 18:59:23 +01:00
Nick Hall 9c0dca6bd1 Merge pull request #1053 from cjmayo:themeicon 2020-11-14 19:29:58 +00:00
Chris Mayo 02e0c1c67d Install 128x128 and 256x256 application icons
Created with ImageMagick using e.g.:

convert -background none ../../../gramps.svg -geometry 256x256 gramps.png
2020-11-14 19:23:25 +00:00
Chris Mayo ebf1715468 Install MIME type icons into the hicolor theme
The gnome theme is defunct.

Remove gnome-mime- prefix from icon filenames.
2020-11-14 19:23:24 +00:00
Nick Hall c10f2da00e Install application icons into correct directories 2020-11-14 19:10:34 +00:00
vantu5z 9f71372a97 Update Russian translation 2020-10-15 16:06:19 +03:00
Zdeněk Hataš 0993d9cfc3 Update Czech translation - typo fixes 2020-09-25 09:02:45 +02:00
Tian Shixiong 34471834ab Update Simplified Chinese translation 2020-09-24 22:37:57 +01:00
Jan Sparreboom ff912f844c Update Dutch translation 2020-09-24 21:36:52 +01:00
Lajos Nemeséri 45eac501a9 Revised and updated hu translation 2020-09-24 19:41:31 +01:00
Juan Saavedra d4e85c2397 Update Spanish translation 2020-09-24 17:52:35 +01:00
bokfink c7a4d287f0 Fix error in Birthday and Anniversary report (#1113)
Fixes an error triggered when the first person_handle in the list
has a death event, but no birth event (get_birth_ref() == None)
and does not have family relationships (spouse_handle == None).
These conditions lead to the local variable short_name not being
declared before it comes time to process death events.

Fixes #11766
2020-09-14 11:13:08 -05:00
Paul Culley c0d622c16a Fix graphdoc to properly escape characters in ids for Graphviz (#1111)
Fixes #11741
2020-09-14 11:10:20 -05:00
John Ralls b38f77f2aa Replace inspect.stack() with inspect.currentframe() (#1104)
* Replace inspect.stack() with inspect.currentframe()

Fixes #11874

Works around https://bugs.python.org/issue12920 which causes every
call to inspect.trace() to fail because __main__ is always the
starting point.

* Fix a few Codecov complaints from files touched by previous commit.

Ignoring the "duplicate code" issue caused by the empty comment line
at the beginning of every file.
2020-09-14 11:08:58 -05:00
RossGammon d91fc9e2fb Update Debian directory after producing the deb file for the 5.1.3 (#1100)
Release.

Co-authored-by: Ross Gammon <rossgammon@debian.org>
2020-09-14 11:05:21 -05:00
Paul Culley 198602be61 Fix crash sorting on columns in Selectors with TreeModels (#1099)
Fixes #11750
2020-09-14 11:04:12 -05:00
Paul Culley 3f9f3215ee Fix progress bar freeze due to changes in Gtk (#1103)
Fixes #11642
2020-09-14 11:02:48 -05:00
Paul Culley beb388a30d Fix svgdrawdoc for text containing XML invalid characters (#1110)
Fixes #11929
2020-09-14 11:00:43 -05:00
John Ralls 29e78d4253 Further changes for bundling with Python 3.8. 2020-08-30 14:46:35 -07:00
John Ralls b80dcaf701 Add libgeocode-glib to bundle so that it actually works. 2020-08-30 14:44:51 -07:00
Leonhaeuser a876d94fbc German tzranslation two smal corrections 2020-08-26 18:08:42 +02:00
John Ralls 95e1e8cb67 [mac] Set __file__ if gramps_launcher.py is run as __main__.
Fixes #11874.
2020-08-25 17:14:10 -07:00
Zdeněk Hataš 4147bc728a Update Czech translation 2020-08-21 11:02:14 +02:00
John Ralls 3a9a7053ec Bundle release of Gramps 5.1.3. 2020-08-20 14:41:57 -07:00
John Ralls b96fd8a274 Add geocode-glib to build. 2020-08-20 14:14:53 -07:00
pehlm 26cf0601d8 Update Swedish translation 2020-08-12 20:32:03 +02:00
prculley c59278ef20 Bump to 5.1.4 2020-08-12 12:05:25 -05:00
prculley 767557be61 Release Gramps 5.1.3 2020-08-12 11:28:29 -05:00
prculley 495d4e58ae Remove duplicates in Translations 2020-08-11 09:24:38 -05:00
prculley fd90a80cf8 Clean up translations for Default/Home Person 2020-08-10 17:16:12 -05:00
Leonhaeuser f6c0103f32 Update German translation 2020-08-10 22:48:17 +02:00
Serge Noiraud 04c1dc8503 Events View: "Main Participants" column does not (#1075)
show the full list of participants when expanded.

Fixes #11805
2020-08-10 15:08:51 -05:00
Paul Culley 8172e1017e Fix Charts/Pedigreeview tooltip Polish translation (#1092)
Fixes #11852
2020-08-10 12:01:49 -05:00
Krystian Safjan ea30c3599b Fix and add objects to Polish translation of Gramps (#1088) 2020-08-10 12:00:54 -05:00
John Ralls 5f3ca40633 Use current Gtk release instead of Gtk-3.14. 2020-08-06 10:57:49 -07:00
John Ralls 9c64dafaea Upgrade pymodules for Python 3.8 compatibility. 2020-08-06 10:57:49 -07:00
prculley 13d83919b9 Fix XML export when 'Group-as" name contains XML invalid chars
Fixes #11834
2020-07-25 10:15:39 -05:00
SNoiraud 62d5a136a4 NarWeb: Province place-type is not displayed 2020-07-25 10:15:07 -05:00
prculley b57061d7c9 Fix ManagedWindow so that new windows don't appear offscreen
when system 'screen' sizes change in part time multi-monitor setups.

Fixes #11831
2020-07-25 10:13:57 -05:00
prculley f7be7ab63f Fix menus when db fails to open due to upgrade/downgrade etc.
Fixes #11604
2020-07-25 10:10:56 -05:00
prculley 97923e7530 Fix issue with attach source tool, results panel
Fixes #11780
2020-07-25 10:09:52 -05:00
prculley 75aabf570d Fix GEDCOM export; don't include ADDR when address is missing
Fixes #11825
2020-07-25 10:08:58 -05:00
SNoiraud 41f1e91600 Coordinates containing a comma instead of a period
Fixes #11823
2020-07-25 10:08:22 -05:00
Leonhaeuser 981c0dfc5c German translation fixed typo 2020-07-23 20:28:59 +02:00
niememat d558a9a004 Update finnish translation 2020-07-17 00:41:16 +03:00
Tian Shixiong 914bd6c0d3 Update Simplified Chinese translation for gramps51 branch 2020-07-09 09:42:35 -05:00
Serge Noiraud e8eb5bf0a1 NarrativeWeb should show patronymic in individuals (#1048)
In the individuals and in surnames pages, we should show the complete name
like defined in the display tab from the narrative web configuration.

Fixes #04404
2020-07-08 16:07:37 -05:00
Serge Noiraud b523530fb0 Narrated Website Google Maps Output JS Warning (#1038)
SensorNotRequired:
The sensor parameter is no longer required for the Maps JavaScript API.
It won't prevent the Maps JavaScript API from working correctly, but we
recommend that you remove the sensor parameter from the script element.

Fixes #011654
2020-07-08 16:00:15 -05:00
giansalvo 0d698c13cc Fix bug 0011078: 'Default person' instead of 'Home person'
- modified button hints
- modified filter rules names and descriptions
- modified .pot and .po files
- substituted 'home person' with 'Home Person'
2020-07-07 15:40:47 -05:00
Leonhaeuser 4232032ce3 Germen fixed translation error of Media: 2020-07-07 00:05:35 +02:00
Leonhaeuser 8f4b51c837 Fix typo 2020-07-04 21:22:12 +02:00
Leonhaeuser f2caecd621 update German translation 2020-07-01 20:02:15 +02:00
Nick Hall c26d6902d1 Use event attribute types in the event reference editor
In the event reference editor, custom event attribute types
should be used rather than the default person attribute types.

Fixes #11576.
2020-06-30 15:55:11 -05:00
SNoiraud b00b1f37f1 Fix typo in gui/configure.py and translation files
Fixes #11665
2020-06-30 15:48:26 -05:00
prculley 9230de61be Fix Verify tool bug caused by bad change in GObject introspection
Fixes: #11708
2020-06-30 15:27:19 -05:00
pehlm 9906f1e4ab A little adjustment to Swedish translation 2020-06-22 22:28:51 +02:00
pehlm a68c0f7aa7 Updates to Swedish translation 2020-06-21 10:22:55 +02:00
Nick Hall 513b27531d Remove Japanese from the incomplete translations
Japanese now has a coverage of 83.2% which is above the 70%
threshold.
2020-06-20 18:27:12 +01:00
Megumi Sakata b8f007c4dd Update Japanese translation 2020-06-20 18:02:57 +01:00
Serge Noiraud e375df1e2a Navweb: incorrect link type for osm css files (#1071)
Fixes #011787
2020-06-07 20:10:01 +02:00
prculley df81a10fe8 Fix import test for change cause by commit a2c66417 which was
Fix GEDCOM import for bad source title when sources precede references.
2020-06-07 10:44:10 -05:00
prculley fa53805534 Merge branch 'maintenance/gramps51' of https://github.com/gramps-project/gramps into maintenance/gramps51 2020-06-07 09:59:37 -05:00
vantu5z e614a79cef update Russian translation 2020-06-03 10:23:56 +03:00
prculley 343633a189 Fix some reports for CLI where warning message about Value not found
Fixes #11621
2020-05-15 15:03:15 -05:00
prculley eb14abbf3e Fix Genealogy Tree reports for crash in CLI
Fixes #11621
2020-05-15 15:03:15 -05:00
prculley 5154d0c016 Add uistate to tree views filter initialization
Fixes #11657
2020-05-15 15:00:05 -05:00
prculley a2c6641774 Fix GEDCOM import for bad source title when sources precede references.
Fixes #11610
2020-05-15 14:59:13 -05:00
prculley 924d82a7c4 Fix RemoveUnused tool for crash caused by Gtk introspection bug
Fixes #11634
2020-05-15 14:58:20 -05:00
prculley f1f8847a86 Fix some Python syntax errors that appear in v3.8.x
Fixes #11641
2020-05-15 14:56:59 -05:00
SNoiraud 748fbd0949 Age: test if the death is the same day as birth 2020-05-15 14:55:15 -05:00
SNoiraud e2e659dc94 Suppress age = 0 days in events list
If the reference event date is equal to the event date, don't show the age
except if the date is estimated, calculated, ...

Fixes #0007745
2020-05-15 14:55:15 -05:00
prculley 6cbc2b896d Fix Dashboard Gramplets to update during db close when not shown
Fixes #11632
2020-05-15 14:53:43 -05:00
prculley d210275a4e Fix Windows GUI mode startup for crash with some languages
Fixes: #11612. #11490, #11518, #9179, #9201, #9266
2020-05-15 14:50:54 -05:00
prculley 0a3a65ffb0 Fix dbapi to support "Abandon Changes & Quit" feature
Fixes #11599
2020-05-15 14:49:55 -05:00
prculley e34b98033e Fix GrampsType for comparison bug with empty string as one value
Fixes #11563
2020-05-15 14:47:06 -05:00
prculley 96de0ceb4e Fix Verify tool bug caused by bad change in GObject introspection
Fixes: #11708
2020-05-07 09:39:09 -05:00
niememat 58335cfee2 Fix translation in Finnish 2020-04-24 15:35:00 +03:00
Joan Creus 2ce48d3793 Updating Catalan translation 2020-04-18 13:06:40 +02:00
Joan Creus f91063884e Updating Catalan translation 2020-04-18 12:57:30 +02:00
prculley 06732b1b5d Fix Date Display so that it uses LC_TIME if defined
Fixes #11230
2020-04-13 11:51:23 -05:00
prculley 26b78c17af Fix StyledText so serialize will match for style list order changes
Fixes #11529
2020-04-13 11:45:15 -05:00
prculley d83fff3b62 Try to fix exceptions on ManagedWindow close
Issues #10252, #10642, #10821, #11163, #11440, #11476, #11482, #11508
2020-04-13 11:36:24 -05:00
John Ralls 823bcaac0d Merge John Ralls's 'bug11639' into maintenance/gramps51 2020-04-08 13:09:17 -07:00
Leonhaeuser b9c324ef37 update Germn translation 2020-04-08 19:17:13 +02:00
Serge Noiraud 23d2c8e694 Same date of birth and death gives an error. (#1011)
Fixes #011553
2020-04-04 09:52:50 +02:00
Serge Noiraud 28dc2e5158 Geography: add a popup for a bad tiles path (#1025) 2020-04-04 09:49:41 +02:00
Serge Noiraud 2baa6f5e40 Narweb: image size limit doesn't match tooltip (#1004)
Fixes #011536
2020-04-04 09:45:54 +02:00
John Ralls eb1b4c1eb5 Protect SQLite3 locale from old-style Unicode locale characters.
PySQLite3 requires that collation names have only ascii alphanumerics
and _. ICU locales use old-style Unicode specifiers and passing them to
create_locale will raise an exception. Translate those characters into
underscores.

Fixes #11639
2020-04-01 09:01:37 -07:00
vantu5z 51f2052cfe update Russian translation 2020-03-26 16:47:52 +03:00
Translator5 ccf6d59b17 [Language: Russian] Maintenance/gramps51 (#1027)
* some Russian translations updates

Новый перевод для неких случаев, но улучшающие понимание и выглядит более уместно. Также применены русские переводы слов, которые использовали до того англицизмы
2020-03-25 15:24:06 +03:00
Joan Creus 74d72f4dd0 Updating Catalan translation 2020-03-03 00:00:28 +01:00
Joan Creus 9ce92f41e3 Updating Catalan translation 2020-02-29 18:00:08 +01:00
Bernard Banko 77cdbb11b5 V&O changed to PZV to avoid ampersand 2020-02-25 23:44:55 +01:00
pehlm 72277db766 Minor update to Swedish translation 2020-02-07 18:30:09 +01:00
prculley 7ae77abead Fix GEDCOM export of estimated/calculated dates with modifers
Fixes #11513
2020-02-04 15:57:40 +00:00
Ross Gammon 04b1463746 New debian release - update changelog 2020-02-04 15:49:02 +00:00
vantu5z 1eeae2edf8 update Russian translation 2020-01-31 14:06:03 +03:00
Bernard Banko 740adc7070 Slovenian translation update 2020-01-26 21:45:38 +01:00
prculley a2dbdbb61a Fix typo in Russian translation 2020-01-23 09:33:24 -06:00
système 8d5b0c83ce typos in french translation #11534 #10534 2020-01-21 20:27:05 +01:00
Fedik 01afe251fb Ukrainian translation update 2020-01-21 18:20:30 +02:00
John Ralls 152ed0b6bc Mac release of 5.1.2. 2020-01-11 13:14:41 -08:00
prculley 5624fb1490 Bump to v5.1.3 2020-01-10 11:43:58 -06:00
prculley 32c700c6bf Release Gramps 5.1.2 2020-01-10 11:29:07 -06:00
prculley 130740553d Update Changelog and NEWS files 2020-01-10 11:20:09 -06:00
Serge Noiraud 675dfdbc70 Narrated Web: bad event links on media pages (#983)
* Navweb: Don't use media regions in some case:

- If we don't show families
- If we don't show events

Fixes #011500

* Navweb: side effect between event and media pages

When a media is processed in the media display section for an event
page, it's remove from the media_list, so when we try to create the
media regions in the media page, the media list is empty and we
can't display the regions.

* Narweb: Don't show the regions for a thumbnail
2020-01-10 17:38:41 +01:00
Nick Hall 34beeaad70 Revert pull request #965
This reverts commit 801be84465.
2020-01-09 19:35:47 +00:00
Serge Noiraud 06cb9d7ea6 Narweb: Private notes for home, intro and contact (#953)
If the notes are private, we can't use them in these pages.
2020-01-09 12:09:25 -06:00
Paul Culley d693881b98 Update LDS Temple list (#984) 2020-01-09 12:04:15 -06:00
Paul Culley 801be84465 Fix Lat/Long translated NSEW display and entry in rtl language;Store Lat/Long in place objects with NSEW always in English (#965)
* Fix Lat/Long translated NSEW display and entry in rtl language

* Store Lat/Long in place objects with NSEW always in English

Issue #11335
2020-01-09 12:03:20 -06:00
Paul Culley 7807ff8a6d Make GuiDestinationOption Folder Icon start in users directory (#979)
Fixes #10917
2020-01-09 12:00:29 -06:00
Paul Culley 672603c8ae Fix import file chooser filter to accept upper case extensions (#962)
* Fix import file chooser filter to accept upper case extensions

Fixes #11463

* Allow import file filter to accept case insensitive extensions

Co-authored-by: Nick Hall <nick-h@gramps-project.org>
2020-01-09 11:56:07 -06:00
Paul Culley c30dfc6343 Fix db to warn/prevent opening newer schema versions (#945) 2020-01-09 11:38:16 -06:00
Paul Culley e6ed0612e3 Fix Progen import to correctly handle AKA surnames (#959)
* Fix Progen import dialog and progress meter for correct parent window

* Fix Progen import to correctly handle AKA surnames

Fixes #11462
2020-01-09 11:37:31 -06:00
Paul Culley 9b0cf1b976 Fix ExportPkg so errors are not lost, and has progress bar for media (#957)
* Fix Export Assistant so error messages get correct parent window

* Fix ExportPkg so errors are not lost, and has progress bar for media

Fixes #11457
2020-01-09 11:36:38 -06:00
Paul Culley ddb29b1628 Fix GEDCOM import when family is missing; import created a missing note (#971)
Fixes #11472
2020-01-09 11:35:28 -06:00
Paul Culley 1a8406e2e4 Fix Dashboard for adding Gramplet crash in Slovenian (#978)
Fixes #11491
2020-01-09 11:34:15 -06:00
Zdeněk Hataš 09e89549de Update Czech translation 2020-01-07 16:40:08 +01:00
Joan Creus afaeb7c995 Updating Catalan translation 2019-12-30 17:49:56 +01:00
Joan Creus 6fa30b889d Updating Catalan translation 2019-12-21 18:21:41 +01:00
Jiří Vejda 1916383a28 Update date parsing for czech locale (#968)
* Fixes bug ID 0011470: some date variants in CS language are not consider valid
2019-12-15 13:03:30 +01:00
romjerome 379c96ee6a update french translation (#969) 2019-12-15 12:59:51 +01:00
romjerome 7b45bbf72e fix tagref support (#956)
Add missing code for event, repository, source, citation and place
2019-12-13 10:59:42 +01:00
romjerome aea9ef3645 [Tree doc Tex] fix "-" char on place name (#961)
* fix "-" char on place name

"-" can lead to confusion, 
generating text out of the box
with PDF file format
2019-12-13 10:55:15 +01:00
romjerome 05f7744cba typo on custom size (#963) 2019-12-09 20:25:07 +01:00
Paul Culley bfc76a08d4 Fix duplicated "døde døde" Norwegion Translation for libnarrate (#950)
Fixes #11429
2019-11-11 15:47:11 +11:00
161 changed files with 85052 additions and 80103 deletions
+312 -187
View File
@@ -1,80 +1,15 @@
2019-09-14 SNoiraud <Serge.Noiraud@free.fr>
2020-08-11 prculley <paulr2787@gmail.com>
* gramps/gen/filters/rules/place/_withinarea.py: Fix deprecation
warning in withinarea rule
* po/ar.po, po/bg.po, po/br.po, po/ca.po, po/cs.po, po/da.po,
po/el.po, po/en_GB.po, po/eo.po, po/es.po, po/fi.po, po/fr.po,
po/ga.po, po/he.po, po/hr.po, po/hu.po, po/is.po, po/it.po,
po/ja.po, po/lt.po, po/mk.po, po/nb.po, po/nl.po, po/nn.po,
po/pl.po, po/pt_BR.po, po/pt_PT.po, po/ro.po, po/ru.po, po/sk.po,
po/sl.po, po/sq.po, po/sr.po, po/sr_Latn.po, po/sv.po, po/ta.po,
po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_HK.po, po/zh_TW.po:
Remove duplicates in Translations
2019-09-14 Nick Hall <nick-h@gramps-project.org>
* gramps/gui/grampsgui.py: Disable development warning message
2019-09-13 Jonas Hahnfeld <hahnjo@hahnjo.de>
* gramps/gen/plug/docgen/treedoc.py: Add options to sandclock in
tree document generator This works and is actually needed to style the root node.
2019-09-11 SNoiraud <Serge.Noiraud@free.fr>
* gramps/gui/filters/sidebar/_personsidebarfilter.py: Using regex in
the sidebar gives different result from previous gramps release. Fixes #11321
2019-09-12 Jérôme Rapinat <romjerome@yahoo.fr>
* po/fr.po: Add missing French translation strings
2019-09-10 Gil da Costa <gdacosta@sommier-colas.fr>
* po/fr.po: Update French translation
2019-09-09 prculley <paulr2787@gmail.com>
* gramps/plugins/docgen/odfdoc.py: Fix odt output when db owner has
XML unfriendly chars ('&') Fixes #11327
2019-09-11 John Bickmore <johnbickmore@users.noreply.github.com>
* README.md: Bump required Python version to 3.3 on Readme As mentioned on the release announcement
https://gramps-project.org/introduction-WP/2019/08/gramps-5-1-0-released/
2019-09-08 SNoiraud <Serge.Noiraud@free.fr>
* gramps/plugins/webreport/narrativeweb.py: Remove
reload_custom_filters to conform to PR894
2019-09-07 prculley <paulr2787@gmail.com>
* gramps/cli/grampscli.py: Fix CLI crash when generating reports Fixes #11318, #11213
2019-09-06 prculley <paulr2787@gmail.com>
* gramps/gui/views/listview.py: Fix Statusbar HandleError on merge
families Fixes #11320, #11294, #11279
2019-09-12 Avi Markovitz <avi.markovitz@gmail.com>
* po/he.po: Update Hebrew translation
2019-09-12 Matti Niemelä <matti.u.niemela@gmail.com>
* po/fi.po: Fix translation in Finnish
2019-09-12 Matti Niemelä <matti.u.niemela@gmail.com>
* po/fi.po: Update finnish translation
2019-09-11 vantu5z <vantu5z@mail.ru>
* po/ru.po: update Russian translation
2019-09-10 pehlm <par.ekholm@pekholm.org>
* po/sv.po: Update Swedish translation
2019-09-10 Mirko Leonhaeuser <mirko@leonhaeuser.de>
* po/de.po: Update German translation
2019-09-10 Nick Hall <nick-h@gramps-project.org>
2020-08-10 prculley <paulr2787@gmail.com>
* po/ar.po, po/bg.po, po/br.po, po/ca.po, po/cs.po, po/da.po,
po/de.po, po/el.po, po/en_GB.po, po/eo.po, po/es.po, po/fi.po,
@@ -83,195 +18,385 @@
po/nn.po, po/pl.po, po/pt_BR.po, po/pt_PT.po, po/ro.po, po/ru.po,
po/sk.po, po/sl.po, po/sq.po, po/sr.po, po/sr_Latn.po, po/sv.po,
po/ta.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_HK.po,
po/zh_TW.po: Merge po files and new template
po/zh_TW.po: Clean up translations for Default/Home Person
2019-09-10 Nick Hall <nick-h@gramps-project.org>
2020-08-10 Leonhaeuser <mirko@leonhaeuser.de>
* po/gramps.pot: Update translation template for new release
* po/de.po: Update German translation
2019-08-27 Avi Markovitz <avi.markovitz@gmail.com>
2020-08-10 Serge Noiraud <Serge.Noiraud@laposte.net>
* po/he.po: Update Hebrew translation
* gramps/gui/views/treemodels/eventmodel.py: Events View: "Main
Participants" column does not (#1075) show the full list of participants when expanded. Fixes #11805
2019-07-11 Pedro Albuquerque <palbuquerque73@gmail.com>
2020-08-10 Paul Culley <paulr2787@gmail.com>
* po/pt_PT.po: Update Portuguese (Europe) translation
* po/pl.po: Fix Charts/Pedigreeview tooltip Polish translation
(#1092) Fixes #11852
2019-06-24 Milo Ivir <mail@milotype.de>
2020-08-10 Krystian Safjan <ksafjan@gmail.com>
* po/hr.po: Update croatian translation - update with newest/current .pot file - translation is complete - corrections in wording and some missing accelerators
* po/gramps.pot, po/pl.po: Fix and add objects to Polish translation
of Gramps (#1088)
2019-09-02 prculley <paulr2787@gmail.com>
2020-08-06 John Ralls <jralls@ceridwen.us>
* gramps/gui/widgets/styledtexteditor.py: Fix missing tooltip
translations in the Note editor toolbar Fixes #11289
* mac/gramps.modules: Use current Gtk release instead of Gtk-3.14.
2019-09-01 SNoiraud <Serge.Noiraud@free.fr>
2020-08-06 John Ralls <jralls@ceridwen.us>
* gramps/gen/filters/rules/place/_withinarea.py: Avoid bad
coordinates in the ref place
* mac/gramps.modules: Upgrade pymodules for Python 3.8
compatibility.
2019-08-28 SNoiraud <Serge.Noiraud@free.fr>
2020-07-09 prculley <paulr2787@gmail.com>
* gramps/gen/filters/rules/place/_withinarea.py: Avoid alphabetic
characters in filter rules
* gramps/plugins/export/exportxml.py: Fix XML export when 'Group-as"
name contains XML invalid chars Fixes #11834
2019-08-23 SNoiraud <Serge.Noiraud@free.fr>
2020-07-08 SNoiraud <serge.noiraud@laposte.net>
* gramps/gen/filters/rules/place/_withinarea.py: Could not convert
string to float by using withinarea filter rule + difference between sidebar filter
and filter rule + some pylint improvements
* gramps/plugins/webreport/basepage.py: NarWeb: Province place-type
is not displayed
2019-08-31 prculley <paulr2787@gmail.com>
2020-07-07 prculley <paulr2787@gmail.com>
* gramps/gen/plug/docgen/graphdoc.py: Fix Graph outputs for multiple
page PDF Postscript Fixes #11305
* gramps/gui/managedwindow.py: Fix ManagedWindow so that new windows
don't appear offscreen when system 'screen' sizes change in part
time multi-monitor setups. Fixes #11831
2019-08-31 prculley <paulr2787@gmail.com>
2020-07-03 prculley <paulr2787@gmail.com>
* gramps/gen/plug/_pluginreg.py, gramps/gui/managedwindow.py,
gramps/gui/plug/quick/_quickreports.py, gramps/gui/uimanager.py,
gramps/gui/viewmanager.py, gramps/gui/views/tags.py,
gramps/gui/widgets/grampletpane.py: Fix to make Gtk 'action names'
always valid Fixes #11291
* gramps/gui/viewmanager.py: Fix menus when db fails to open due to
upgrade/downgrade etc. Fixes #11604
2019-08-31 prculley <paulr2787@gmail.com>
2020-07-03 prculley <paulr2787@gmail.com>
* gramps/gui/uimanager.py, gramps/gui/views/tags.py: Fix missing
menus/buttons when operating in non-English languages Fixes #11292
* gramps/gui/plug/_windows.py: Fix issue with attach source tool,
results panel Fixes #11780
2019-08-31 SNoiraud <Serge.Noiraud@free.fr>
2020-07-03 prculley <paulr2787@gmail.com>
* gramps/gui/widgets/validatedmaskedentry.py: Cursor position error
in lat and long fields Fixes #11310
* gramps/plugins/export/exportgedcom.py: Fix GEDCOM export; don't
include ADDR when address is missing Fixes #11825
2019-08-30 SNoiraud <Serge.Noiraud@free.fr>
2020-07-02 SNoiraud <serge.noiraud@laposte.net>
* gramps/plugins/tool/removespaces.py: Avoid all characters looking
like a dash hyphen non breaking hyphen figure dash em dash horizontal bar Fixes #11308
* gramps/gui/editors/editplace.py,
gramps/gui/editors/editplaceref.py: Coordinates containing a comma
instead of a period Fixes #11823
2019-08-30 SNoiraud <Serge.Noiraud@free.fr>
2020-07-23 Leonhaeuser <mirko@leonhaeuser.de>
* data/css/Web_Mainz.css: Narrative web: Mainz Style sheet weird
looking Fixes #11282
* po/de.po: German translation fixed typo
2019-09-02 SNoiraud <Serge.Noiraud@free.fr>
2020-07-17 niememat <niememat@gmail.com>
* gramps/plugins/view/relview.py: Set symbols for the active person
* po/fi.po: Update finnish translation
2019-08-28 SNoiraud <Serge.Noiraud@free.fr>
2020-06-07 Tian Shixiong <tiansworld@fedoraproject.org>
* gramps/plugins/view/relview.py: Set good symbols for marriage,
baptism, cremation and burial
* po/zh_CN.po: Update Simplified Chinese translation for gramps51
branch
2019-08-28 SNoiraud <Serge.Noiraud@free.fr>
2020-07-08 Serge Noiraud <Serge.Noiraud@laposte.net>
* gramps/plugins/view/relview.py: Reduce the size of the sexuality
symbol in relview Fixes #11295
* gramps/plugins/webreport/basepage.py,
gramps/plugins/webreport/person.py,
gramps/plugins/webreport/surname.py: NarrativeWeb should show
patronymic in individuals (#1048) In the individuals and in surnames pages, we should show the
complete name like defined in the display tab from the narrative web
configuration. Fixes #04404
2019-08-28 prculley <paulr2787@gmail.com>
2020-07-08 Serge Noiraud <Serge.Noiraud@laposte.net>
* gramps/gui/widgets/styledtexteditor.py: Fix exception when editing
Note with italics/bold etc. in non English Fixes #11284
* gramps/plugins/webreport/person.py,
gramps/plugins/webreport/place.py: Narrated Website Google Maps
Output JS Warning (#1038) SensorNotRequired: The sensor parameter is no longer required for
the Maps JavaScript API. It won't prevent the Maps JavaScript API
from working correctly, but we recommend that you remove the sensor
parameter from the script element. Fixes #011654
2019-08-27 Nick Hall <nick-h@gramps-project.org>
2020-01-11 giansalvo <pioggia3+github@gmail.com>
* gramps/gui/views/pageview.py: Restore keybindings for gramplet
bars Resolves #11297.
* gramps/gen/filters/rules/person/_isdefaultperson.py,
gramps/gen/filters/rules/person/_islessthannthgenerationancestorofd
efaultperson.py, gramps/gui/views/navigationview.py,
gramps/plugins/lib/libpersonview.py,
gramps/plugins/view/fanchartview.py,
gramps/plugins/view/geoclose.py,
gramps/plugins/view/geofamclose.py,
gramps/plugins/view/geomoves.py, gramps/plugins/view/geoperson.py,
gramps/plugins/view/pedigreeview.py,
gramps/plugins/view/relview.py, po/ar.po, po/bg.po, po/br.po,
po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/en_GB.po,
po/eo.po, po/es.po, po/fi.po, po/fr.po, po/ga.po, po/gramps.pot,
po/he.po, po/hr.po, po/hu.po, po/is.po, po/it.po, po/ja.po,
po/lt.po, po/mk.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po,
po/pt_BR.po, po/pt_PT.po, po/ro.po, po/ru.po, po/sk.po, po/sl.po,
po/sq.po, po/sr.po, po/sr_Latn.po, po/sv.po, po/ta.po, po/tr.po,
po/uk.po, po/vi.po, po/zh_CN.po, po/zh_HK.po, po/zh_TW.po: Fix bug
0011078: 'Default person' instead of 'Home person' - modified button hints - modified filter rules names and descriptions - modified .pot and .po files - substituted 'home person' with 'Home Person'
2019-08-27 Nick Hall <nick-h@gramps-project.org>
2020-07-07 Leonhaeuser <mirko@leonhaeuser.de>
* gramps/gui/plug/quick/_quickreports.py: Fix bug in web connection
menu launching incorrect web site Resolves #11280.
* po/de.po: Germen fixed translation error of Media:
2019-08-26 SNoiraud <Serge.Noiraud@free.fr>
2020-07-04 Leonhaeuser <mirko@leonhaeuser.de>
* gramps/gui/autocomp.py: Translation problem when creating event
filter If you create a filter with the rule name: "Events with a particular type" or "Events with <data>" The menu "Travel", "Academic"... are not
translated Fixes #11293
* po/de.po: Fix typo
2019-08-26 SNoiraud <Serge.Noiraud@free.fr>
2020-07-01 Leonhaeuser <mirko@leonhaeuser.de>
* gramps/gui/configure.py, gramps/gui/widgets/grampletbar.py: Error
when checking option to add Quit to Taskbar Fixes #11290
* po/de.po: update German translation
2019-08-25 SNoiraud <Serge.Noiraud@free.fr>
2020-02-16 Nick Hall <nick-h@gramps-project.org>
* gramps/plugins/webreport/narrativeweb.py,
gramps/plugins/webreport/person.py: Make the narratives notes
placement an option From 5.1 the narrative notes are placed just after the name, gender
and age at death. This follow the feature request #6772. Some
people want to have this placement an option to have the same
functionality as before Fixes #11283
* gramps/gui/editors/editeventref.py: Use event attribute types in
the event reference editor In the event reference editor, custom event attribute types should
be used rather than the default person attribute types. Fixes #11576.
2019-08-24 Ross Gammon <rossgammon@mail.dk>
2020-04-23 SNoiraud <serge.noiraud@laposte.net>
* debian/changelog: Finalise Debian changelog for 5.1.0 release
* gramps/gui/configure.py, po/ar.po, po/bg.po, po/br.po, po/ca.po,
po/cs.po, po/da.po, po/de.po, po/el.po, po/en_GB.po, po/eo.po,
po/es.po, po/fi.po, po/fr.po, po/ga.po, po/he.po, po/hr.po,
po/hu.po, po/is.po, po/it.po, po/ja.po, po/lt.po, po/mk.po,
po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt_BR.po, po/pt_PT.po,
po/ro.po, po/ru.po, po/sk.po, po/sl.po, po/sq.po, po/sr.po,
po/sr_Latn.po, po/sv.po, po/ta.po, po/tr.po, po/uk.po, po/vi.po,
po/zh_CN.po, po/zh_HK.po, po/zh_TW.po: Fix typo in gui/configure.py
and translation files Fixes #11665
2019-08-24 Ross Gammon <rossgammon@mail.dk>
2020-05-07 prculley <paulr2787@gmail.com>
* debian/control: Bump gtk+ version to 3.12 & add
gir1.2-geocodeglib-1.0 dependency
* gramps/plugins/tool/verify.py: Fix Verify tool bug caused by bad
change in GObject introspection Fixes: #11708
2019-08-24 Ross Gammon <rossgammon@mail.dk>
2020-06-22 pehlm <par.ekholm@pekholm.org>
* debian/copyright: Update copyrights
* po/sv.po: A little adjustment to Swedish translation
2019-08-24 Ross Gammon <rossgammon@mail.dk>
2020-06-21 pehlm <par.ekholm@pekholm.org>
* debian/changelog, debian/control: Merge last 5.0.2 debian release
information into 51 maintenance branch
* po/sv.po: Updates to Swedish translation
2019-08-23 Sebastian Schubert <schubert.seb@gmail.com>
2020-06-20 Nick Hall <nick-h@gramps-project.org>
* README.md: Add optional fontconfig package to README.md
* gramps/gen/utils/grampslocale.py: Remove Japanese from the
incomplete translations Japanese now has a coverage of 83.2% which is above the 70%
threshold.
2019-08-23 Sebastian Schubert <schubert.seb@gmail.com>
2020-06-20 Megumi Sakata <megumi.sakata.k@gmail.com>
* NEWS: Fix typo in NEWS
* po/ja.po: Update Japanese translation
2019-08-30 Zdeněk Hataš <zdenek.hatas@gmail.com>
2020-06-07 Serge Noiraud <Serge.Noiraud@laposte.net>
* po/cs.po: Update Czech translation
* gramps/plugins/webreport/person.py,
gramps/plugins/webreport/place.py: Navweb: incorrect link type for
osm css files (#1071) Fixes #011787
2019-08-29 Zdeněk Hataš <zdenek.hatas@gmail.com>
2020-06-07 prculley <paulr2787@gmail.com>
* po/cs.po: Update Czech translation
* data/tests/imp_sample.gramps: Fix import test for change cause by
commit a2c66417 which was Fix GEDCOM import for bad source title
when sources precede references.
2019-08-25 Mirko Leonhaeuser <mirko@leonhaeuser.de>
2020-06-07 prculley <paulr2787@gmail.com>
* po/de.po: German translation updated
* : commit e614a79cef213f57552ceb566eb2d294c9435231 Author: vantu5z
<vantu5z@mail.ru> Date: Tue Apr 28 15:23:25 2020 +0300
2019-08-24 John Ralls <jralls@ceridwen.us>
2020-03-16 prculley <paulr2787@gmail.com>
* mac/Info.plist, mac/gramps.modules: Release Gramps-5.1.0 on Mac.
* gramps/gen/plug/menu/_enumeratedlist.py: Fix some reports for CLI
where warning message about Value not found Fixes #11621
2019-08-16 John Ralls <jralls@ceridwen.us>
2020-03-16 prculley <paulr2787@gmail.com>
* mac/release.entitlements.plist: An entitlements plist for
codesigning Gramps. Python is an interpreter and therefore needs to create executable
memory. Since it doesn't know how to sign that memory it requires
the allow-unsigned-executable-memory entitlement to run in a
hardened runtime. One must apply this entitlement to both Gramps.app
and Gramps.app/Contents/MacOS/dot when codesigning them.
* gramps/cli/plug/__init__.py: Fix Genealogy Tree reports for crash
in CLI Fixes #11621
2019-06-11 John Ralls <jralls@ceridwen.us>
2020-04-10 prculley <paulr2787@gmail.com>
* mac/gramps.modules: Fix graphviz and exiv2 download URLs.
* gramps/gui/views/treemodels/treebasemodel.py: Add uistate to tree
views filter initialization Fixes #11657
2019-06-11 John Ralls <jralls@ceridwen.us>
2020-04-04 prculley <paulr2787@gmail.com>
* mac/gramps.modules: Update dependency versions and download paths.
* gramps/plugins/lib/libgedcom.py: Fix GEDCOM import for bad source
title when sources precede references. Fixes #11610
2019-08-22 vantu5z <vantu5z@mail.ru>
2020-03-31 prculley <paulr2787@gmail.com>
* gramps/plugins/tool/removeunused.py: Fix RemoveUnused tool for
crash caused by Gtk introspection bug Fixes #11634
2020-03-30 prculley <paulr2787@gmail.com>
* gramps/gen/plug/_manager.py, gramps/gen/plug/_pluginreg.py,
gramps/gui/pluginmanager.py,
gramps/plugins/lib/maps/messagelayer.py: Fix some Python syntax
errors that appear in v3.8.x Fixes #11641
2020-03-26 SNoiraud <serge.noiraud@laposte.net>
* gramps/gui/editors/displaytabs/eventrefmodel.py,
gramps/plugins/gramplet/events.py: Age: test if the death is the
same day as birth
2020-03-25 SNoiraud <serge.noiraud@laposte.net>
* gramps/gui/editors/displaytabs/eventrefmodel.py,
gramps/plugins/gramplet/events.py: Suppress age = 0 days in events
list If the reference event date is equal to the event date, don't show
the age except if the date is estimated, calculated, ... Fixes #0007745
2020-03-23 prculley <paulr2787@gmail.com>
* gramps/gui/viewmanager.py: Fix Dashboard Gramplets to update
during db close when not shown Fixes #11632
2020-03-14 prculley <paulr2787@gmail.com>
* gramps/grampsapp.py: Fix Windows GUI mode startup for crash with
some languages Fixes: #11612. #11490, #11518, #9179, #9201, #9266
2020-03-07 prculley <paulr2787@gmail.com>
* gramps/gen/db/generic.py, gramps/plugins/db/dbapi/dbapi.py: Fix
dbapi to support "Abandon Changes & Quit" feature Fixes #11599
2020-02-08 prculley <paulr2787@gmail.com>
* gramps/gen/lib/grampstype.py: Fix GrampsType for comparison bug
with empty string as one value Fixes #11563
2020-05-07 prculley <paulr2787@gmail.com>
* gramps/plugins/tool/verify.py: Fix Verify tool bug caused by bad
change in GObject introspection Fixes: #11708
2020-04-24 niememat <niememat@gmail.com>
* po/fi.po: Fix translation in Finnish
2020-04-18 Joan Creus <joan.creusandreu@gmail.com>
* po/ca.po: Updating Catalan translation
2020-04-18 Joan Creus <joan.creusandreu@gmail.com>
* po/ca.po: Updating Catalan translation
2020-01-20 prculley <paulr2787@gmail.com>
* gramps/gen/datehandler/__init__.py: Fix Date Display so that it
uses LC_TIME if defined Fixes #11230
2020-01-12 prculley <paulr2787@gmail.com>
* gramps/gen/lib/styledtext.py,
gramps/gen/lib/test/styledtext_test.py: Fix StyledText so serialize
will match for style list order changes Fixes #11529
2020-01-08 prculley <paulr2787@gmail.com>
* gramps/gui/managedwindow.py: Try to fix exceptions on
ManagedWindow close Issues #10252, #10642, #10821, #11163, #11440, #11476, #11482,
#11508
2020-04-08 John Ralls <jralls@ceridwen.us>
* : Merge John Ralls's 'bug11639' into maintenance/gramps51
2020-04-04 Serge Noiraud <Serge.Noiraud@laposte.net>
* gramps/plugins/tool/verify.py: Same date of birth and death gives
an error. (#1011) Fixes #011553
2020-04-04 Serge Noiraud <Serge.Noiraud@laposte.net>
* gramps/plugins/lib/maps/osmgps.py: Geography: add a popup for a
bad tiles path (#1025)
2020-04-04 Serge Noiraud <Serge.Noiraud@laposte.net>
* gramps/plugins/webreport/narrativeweb.py: Narweb: image size limit
doesn't match tooltip (#1004) Fixes #011536
2020-04-01 John Ralls <jralls@ceridwen.us>
* gramps/plugins/db/dbapi/sqlite.py: Protect SQLite3 locale from
old-style Unicode locale characters. PySQLite3 requires that collation names have only ascii
alphanumerics and _. ICU locales use old-style Unicode specifiers
and passing them to create_locale will raise an exception. Translate
those characters into underscores. Fixes #11639
2020-03-26 vantu5z <vantu5z@mail.ru>
* po/ru.po: update Russian translation
2019-08-22 pehlm <par.ekholm@pekholm.org>
2020-03-25 Translator5 <Translator5@users.noreply.github.com>
* po/sv.po: Update Swedish translation with the new gramps.pot
* po/ru.po: [Language: Russian] Maintenance/gramps51 (#1027) * some Russian translations updates Новый перевод для неких случаев, но
улучшающие понимание и выглядит
более уместно. Также применены
русские переводы слов, которые
использовали до того англицизмы
2019-08-21 prculley <paulr2787@gmail.com>
2020-03-03 Joan Creus <joan.creusandreu@gmail.com>
* Bump to 5.1.1
* po/ca.po: Updating Catalan translation
2020-02-29 Joan Creus <joan.creusandreu@gmail.com>
* po/ca.po: Updating Catalan translation
2020-02-25 Bernard Banko <beernarrd@gmail.com>
* po/sl.po: V&O changed to PZV to avoid ampersand
2020-02-07 pehlm <par.ekholm@pekholm.org>
* po/sv.po: Minor update to Swedish translation
2020-01-07 prculley <paulr2787@gmail.com>
* data/tests/exp_sample_ged.ged,
gramps/plugins/export/exportgedcom.py: Fix GEDCOM export of
estimated/calculated dates with modifers Fixes #11513
2020-01-11 Ross Gammon <rossgammon@mail.dk>
* debian/changelog: New debian release - update changelog
2020-01-31 vantu5z <vantu5z@mail.ru>
* po/ru.po: update Russian translation
2020-01-26 Bernard Banko <beernarrd@gmail.com>
* po/sl.po: Slovenian translation update
2020-01-23 prculley <paulr2787@gmail.com>
* po/ru.po: Fix typo in Russian translation
2020-01-21 système <romjerome@users.noreply.github.com>
* po/fr.po: typos in french translation #11534 #10534
2020-01-21 Fedik <getthesite@gmail.com>
* po/uk.po: Ukrainian translation update
2020-01-11 John Ralls <jralls@ceridwen.us>
* mac/Info.plist, mac/gramps.modules: Mac release of 5.1.2.
2020-01-10 prculley <paulr2787@gmail.com>
* gramps/gen/const.py, gramps/gui/grampsgui.py, gramps/version.py:
Bump to v5.1.3
+122
View File
@@ -1,3 +1,125 @@
2020-08-11
Version 5.1.3
* Update ca, de, fi, fr, ja, pl, ru, sl, sv, uk, zh_CN translation
* Events View: "Main Participants" column does not show the full list
of participants when expanded.
* mac/gramps.modules: Use current Gtk release instead of Gtk-3.14.
* mac/gramps.modules: Upgrade pymodules for Python 3.8 compatibility.
* Fix XML export when 'Group-as" name contains XML invalid chars
* Fix NarWeb: Province place-type is not displayed
* Fix ManagedWindow so that new windows don't appear offscreen when
system 'screen' sizes change in part time multi-monitor setups.
* Fix menus when db fails to open due to upgrade/downgrade etc.
* Fix issue with attach source tool, results panel
* Fix GEDCOM export; don't include ADDR when address is missing
* EditPlace: Allow Coordinates containing a comma instead of a period
* NarrativeWeb:
* Should show patronymic in individuals.
In the individuals and in surnames pages, we should show the
complete name like defined in the display tab from the narrative web
configuration.
* Fix Narrated Website Google Maps Output JS Warning SensorNotRequired
* Fix incorrect link type for osm css files
* Fix image size limit doesn't match tooltip
* Update all translations for changes from 'Default' to 'Home' Person
* Change GUI references to 'Home Person' instead of 'Default Person'
* Use event attribute types in the event reference editor.
In the event reference editor, custom event attribute types should
be used rather than the default person attribute types.
* Fix Verify tool bug caused by bad change in GObject introspection
* Fix RemoveUnused tool for crash caused by Gtk introspection bug
* Fix import test for change cause by previous change which was:
Fix GEDCOM import for bad source title when sources precede references.
* Fix GEDCOM import for bad source title when sources precede references.
* Fix some reports for CLI where warning message about Value not found
* Fix Genealogy Tree reports for crash in CLI
* Add uistate to tree views filter initialization
* Fix some Python syntax errors that appear in v3.8.x
* Suppress age = 0 days in events list. If the reference event date is equal
to the event date, don't show the age except if the date is estimated,
calculated, etc.
* Fix Dashboard Gramplets to update during db close when not shown
* Fix Windows GUI mode startup for crash with some languages
* Fix dbapi to support "Abandon Changes & Quit" feature
* Fix GrampsType for comparison bug with empty string as one value
* Fix Date Display so that it uses LC_TIME if defined
* Fix StyledText so serialize will match for style list order changes
* Try to fix exceptions on ManagedWindow close
* Fix Mac SQLite3 locale bug when locale contains non-ascii characters
* Fix issue when Person has Same date of birth and death; gives an error.
* Geography: add a popup for a bad tiles path
* Fix GEDCOM export of estimated/calculated dates with modifers
* Bump to v5.1.3
2020-01-14
Version 5.1.2
* Narweb: Private notes for home, intro and contact. If the notes are private,
we can't use them in these pages.
* Referenced regions problems. When image width > 800, the referenced
regions are incorrectly placed
* Ancestor's tree display looks weird Solves the following:
- Person boxes overlap
- Some person boxes partially visible or hidden
* some cleanup in ancestortree.css
* ancestor tree and long names.
* Adapt ancestor tree css file for all themes
* dates not localised in place pages
* Mainz problem with short text in one note, Issue occurs on the homepage
and introduction page.
* bad event links on media pages
* Navweb: Don't use media regions in some case:
- If we don't show families
- If we don't show events
- Don't show the media regions for a thumbnail
* WEBCAL: home link translated to lowercase
* Wrong web calendar title on home page. This solves the possibility to
have ">", "<" in the title
* Update LDS Temple list
* Make GuiDestinationOption Folder Icon start in users directory
* Allow import file filter to accept case insensitive extensions
* Fix db to warn/prevent opening newer schema versions
* Fix Progen import dialog and progress meter for correct parent window
* Fix Progen import to correctly handle AKA surnames
* Fix ExportPkg so errors are not lost, and has progress bar for media
* Fix Export Assistant so error messages get correct parent window
* Fix GEDCOM import when family is missing; import created a missing note
* Fix Dashboard for adding Gramplet crash in Slovenian
* Update cs, ca, fr, uk, he, fi, hr, de, sv translation
* Update date parsing for czech locale
* Fix Spanish translation for dates
* fix private proxy tagref support. Add missing code for event, repository,
source, citation and place
* [Tree doc Tex] fix "-" char on place name "-" can lead to confusion,
generating text out of the box with PDF file format
* [Tree doc Tex] fix typo on custom size
* Fix duplicated "døde døde" Norwegion Translation for libnarrate
* Fix up Event Editors Place display for bidi text with Gramps ID
* Fix issues with RTL languages and LAT/LONG
* Fix display of GPS coordinates in Places view for RTL languages
* Fix place editor lat/long entry for RTL languages
* Fix GEDCOM export to avoid translated GrampsType strings
* Allow Tools with Notbook tabs to expand to fill the window
* Limit Age Stats gramplet settings to appropriate values.
* Max ages should be divisible by 5 to avoid out of range errors.
* The chart width should be greater than 45 to look right and
avoid division by zero errors.
* Fix the Preferences 'Age display precision' value getting lost
* Fix Window family tree title for non-ASCII chars on Windows
* Fix Preferences/Genealogical Symbols when only one font is present
* Fix various Entry fields so Undo/Redo works
* Fix tag colors on PedigreeView
* Fix Gramps -v error when Gtk is not present
* Fix for PedigreeView not reflecting changes to birthday or death
* ODF DOC - Fix improper escaping in odt output for TOC/Bookmark etc.
* Fix CLI parser to accept negative integers as valid
* Fix Descendant Tree report for HandleError when no parents on family
* Fix Reorder ID tool so subsequent db additions used next possible ID
* Upgrade export VCalendar to v2.0, so can export all utf8 characters
* Fix Preferences so <ctrl>PageUp/PageDn doesn't stick on Dates tab
* Graphs: Escape for name, dates and places in graph reports with XML
illegal characters
* Fix 'Go' menu direct object selection, goes to wrong place
2019-09-14
Version 5.1.1
* Update translations: cs, de, fi, fr, he, hr, pt_PT, ru, sv

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

+82 -14
View File
@@ -20,6 +20,9 @@
<code>SAMOA</code>
<code>AP</code>
</temple>
<temple name="Arequipa Peru Temple">
<code>AREQU</code>
</temple>
<temple name="Asuncion, Paraguay">
<code>ASUNC</code>
</temple>
@@ -27,6 +30,9 @@
<code>ATLAN</code>
<code>AT</code>
</temple>
<temple name="Barranquilla Colombia Temple">
<code>BARRA</code>
</temple>
<temple name="Baton Rouge, Louisiana">
<code>BROUG</code>
</temple>
@@ -57,6 +63,9 @@
<temple name="Bountiful, Utah">
<code>BOUNT</code>
</temple>
<temple name="Brigham City Utah Temple">
<code>BRIGH</code>
</temple>
<temple name="Brisbane, Australia">
<code>BRISB</code>
</temple>
@@ -79,8 +88,12 @@
<code>ALBR</code>
</temple>
<temple name="Cebu, Philippines">
<code>CEBUP</code>
<code>CEBU</code>
</temple>
<temple name="Cedar City Utah">
<code>CEDAR</code>
</temple>
<temple name="Chicago, Illinois">
<code>CHICA</code>
<code>CH</code>
@@ -94,15 +107,18 @@
<temple name="Colonia Juarez, Chihuahua, Mexico">
<code>COLJU</code>
</temple>
<temple name="Columbia, South Carolina">
<code>COLSC</code>
</temple>
<temple name="Columbia River, Washington">
<code>CRIVE</code>
</temple>
<temple name="Columbia, South Carolina">
<code>COLSC</code>
</temple>
<temple name="Columbus, Ohio">
<code>COLUM</code>
</temple>
<temple name="Concepción Chile">
<code>CONCE</code>
</temple>
<temple name="Copenhagen, Denmark">
<code>COPEN</code>
</temple>
@@ -129,6 +145,19 @@
<temple name="Edmonton, Alberta">
<code>EDMON</code>
</temple>
<temple name="Endowment House">
<code>EHOUS</code>
<code>EH</code>
</temple>
<temple name="Fort Collins Colorado">
<code>FORTC</code>
</temple>
<temple name="Fort Lauderdale Florida">
<code>FORTL</code>
</temple>
<temple name="Fortaleza Brazil">
<code>FORTA</code>
</temple>
<temple name="Frankfurt, Germany">
<code>FRANK</code>
<code>FR</code>
@@ -191,6 +220,9 @@
<code>IFALL</code>
<code>IF</code>
</temple>
<temple name="Indianapolis Indiana">
<code>INDIA</code>
</temple>
<temple name="Johannesburg, South Africa">
<code>JOHAN</code>
<code>JO</code>
@@ -202,10 +234,14 @@
<temple name="Kansas City, Missouri">
<code>KANSA</code>
</temple>
<temple name="Kinshasa Democratic Republic of the Congo">
<code>KINSH</code>
</temple>
<temple name="Kona, Hawaii">
<code>KONA</code>
</temple>
<temple name="Kiev, Ukraine">
<code>KYIV</code>
<code>KIEV</code>
</temple>
<temple name="Kirtland, Ohio">
@@ -223,6 +259,9 @@
<code>LIMA</code>
<code>LI</code>
</temple>
<temple name="Lisbon Portugal">
<code>LISBO</code>
</temple>
<temple name="Logan, Utah">
<code>LOGAN</code>
<code>LG</code>
@@ -270,6 +309,9 @@
<temple name="Merida, Mexico">
<code>MERID</code>
</temple>
<temple name="Meridian Idaho">
<code>MIDAH</code>
</temple>
<temple name="Mesa, Arizona">
<code>ARIZO</code>
<code>AZ</code>
@@ -325,6 +367,7 @@
<code>OKLAH</code>
</temple>
<temple name="Oquirrh Mountain, Utah">
<code>OQUIR</code>
<code>OMOUN</code>
</temple>
<temple name="Orlando, Florida">
@@ -340,6 +383,12 @@
<code>PAPEE</code>
<code>TA</code>
</temple>
<temple name="Paris France">
<code>PARIS</code>
</temple>
<temple name="Payson Utah">
<code>PAYSO</code>
</temple>
<temple name="Perth, Australia">
<code>PERTH</code>
</temple>
@@ -349,6 +398,9 @@
<temple name="Phoenix, Arizona">
<code>PHOEN</code>
</temple>
<temple name="Port-au-Prince Haiti">
<code>PORTA</code>
</temple>
<temple name="Portland, Oregon">
<code>PORTL</code>
<code>PT</code>
@@ -359,6 +411,9 @@
<temple name="Preston, England">
<code>PREST</code>
</temple>
<temple name="Provo City Center, Utah">
<code>PROCC</code>
</temple>
<temple name="Provo, Utah">
<code>PROVO</code>
<code>PV</code>
@@ -385,6 +440,7 @@
<code>REXBU</code>
</temple>
<temple name="Rome, Italy">
<code>ROMEI</code>
<code>ROME</code>
</temple>
<temple name="Sacramento, California">
@@ -394,12 +450,6 @@
<code>SGEOR</code>
<code>SG</code>
</temple>
<temple name="St. Louis, Missouri">
<code>SLOUI</code>
</temple>
<temple name="St. Paul, Minnesota">
<code>SPMIN</code>
</temple>
<temple name="Salt Lake City, Utah">
<code>SLAKE</code>
<code>SL</code>
@@ -415,6 +465,7 @@
<code>SJOSE</code>
</temple>
<temple name="San Salvador, El Salvador">
<code>SANSA</code>
<code>SSALV</code>
</temple>
<temple name="Santiago, Chile">
@@ -428,6 +479,9 @@
<code>SPAUL</code>
<code>SP</code>
</temple>
<temple name="Sapporo Japan">
<code>SAPPO</code>
</temple>
<temple name="Seattle, Washington">
<code>SEATT</code>
<code>SE</code>
@@ -442,6 +496,15 @@
<temple name="Spokane, Washington">
<code>SPOKA</code>
</temple>
<temple name="St. Louis, Missouri">
<code>SLOUI</code>
</temple>
<temple name="St. Paul, Minnesota">
<code>SPMIN</code>
</temple>
<temple name="Star Valley Wyoming">
<code>STARV</code>
</temple>
<temple name="Stockholm, Sweden">
<code>STOCK</code>
<code>ST</code>
@@ -463,9 +526,15 @@
<temple name="Tegucigalpa, Honduras">
<code>TEGUC</code>
</temple>
<temple name="The Gila Valley Arizona">
<code>GILAV</code>
</temple>
<temple name="The Hague, Netherlands">
<code>HAGUE</code>
</temple>
<temple name="Tijuana Mexico">
<code>TIJUA</code>
</temple>
<temple name="Tokyo, Japan">
<code>TOKYO</code>
<code>TK</code>
@@ -474,16 +543,19 @@
<code>TORON</code>
<code>TORNO</code>
<code>TR</code>
</temple>
<temple name="Trujillo, Peru">
<code>TRUJI</code>
</temple>
<temple name="Tucson Arizona">
<code>TUCSO</code>
</temple>
<temple name="Tuxtla Gutierrez, Mexico">
<code>TGUTI</code>
</temple>
<temple name="Twin Falls, Idaho">
<code>TFALL</code>
<code>TWINF</code>
<code>TFALL</code>
</temple>
<temple name="Vancouver, British Columbia">
<code>VANCO</code>
@@ -505,10 +577,6 @@
<code>WINTE</code>
<code>WQUAR</code>
</temple>
<temple name="Endowment House">
<code>EHOUS</code>
<code>EH</code>
</temple>
<temple name="President's Office">
<code>POFFI</code>
<code>PO</code>
+6 -6
View File
@@ -1,12 +1,12 @@
0 HEAD
1 SOUR Gramps
2 VERS 5.0.2
2 VERS 5.1.2
2 NAME Gramps
1 DATE 4 AUG 2019
2 TIME 15:26:44
1 DATE 7 JAN 2020
2 TIME 13:39:43
1 SUBM @SUBM@
1 FILE C:\Users\prc\AppData\Roaming\gramps\temp\exp_sample_ged.ged
1 COPR Copyright (c) 2019 Alex Roitman,,,.
1 COPR Copyright (c) 2020 Alex Roitman,,,.
1 GEDC
2 VERS 5.5.1
2 FORM LINEAGE-LINKED
@@ -911,7 +911,7 @@
2 DATE I think 1970 to 1971
2 PLAC San Francisco, San Francisco Co., CA
1 SLGC
2 DATE EST ABT 1999
2 DATE ABT 1999
2 FAMC @F0016@
2 TEMP DENVE
2 PLAC Denver, Denver Co., CO, Denver Co., Colorado, USA
@@ -1424,7 +1424,7 @@
0 @N0018@ NOTE Another Citation Note
0 @N0019@ NOTE A bad photo for sure
0 @O0000@ OBJE
1 FILE c:\users\prc\workspace\grampsm\main\data\tests\O0.jpg
1 FILE d:\users\prc\documents\gramps\data\tests\O0.jpg
2 FORM jpg
2 TITL Michael O'Toole 2015-11
1 NOTE @N0019@
+3 -3
View File
@@ -3,7 +3,7 @@
"http://gramps-project.org/xml/1.7.1/grampsxml.dtd">
<database xmlns="http://gramps-project.org/xml/1.7.1/">
<header>
<created date="2019-08-04" version="5.0.2"/>
<created date="1999-12-25" version="5.1.3"/>
<researcher>
<resname>Alex Roitman,,,</resname>
<resaddr>Not Provided</resaddr>
@@ -1302,7 +1302,7 @@
</reporef>
</source>
<source handle="_0000008500000085" change="1" id="S0000">
<stitle>@S0@</stitle>
<stitle>Marriage Certificae</stitle>
<noteref hlink="_000000e7000000e7"/>
<reporef hlink="_000000e6000000e6" callno="what-321-ever" medium="Photo"/>
</source>
@@ -1705,7 +1705,7 @@ Unknown tag Line 1111:
<range start="0" end="163"/>
</style>
</note>
<note handle="_000000f9000000f9" change="1564950708" id="N0036" type="General">
<note handle="_000000f9000000f9" change="1591544255" id="N0036" type="General">
<text>Objects referenced by this note were missing in a file imported on 12/25/1999 12:00:00 AM.</text>
</note>
</notes>
+13
View File
@@ -1,3 +1,16 @@
gramps (5.1.3-1) focal; urgency=medium
* New release
* Update debian/copyright for Alex Roitman
-- Ross Gammon <rosco2@ubuntu.com> Sun, 16 Aug 2020 20:23:34 +0200
gramps (5.1.2-1) unstable; urgency=medium
* New release
-- Ross Gammon <rossgammon@debian.org> Sat, 11 Jan 2020 19:07:08 +0100
gramps (5.1.1-1) unstable; urgency=medium
* New release
+1 -1
View File
@@ -3,7 +3,7 @@ Upstream-Name: Gramps
Source: https://gramps-project.org
Files: *
Copyright: 2000-2007, Alex Roitman
Copyright: 2000-2007, 2020 Alex Roitman
2000-2002, Bruce J. DeGrasse
2000-2008, Donald N. Allingham
2000-2007, Martin Hawlisch
+2 -2
View File
@@ -519,8 +519,8 @@ class CommandLineReport:
self.format = tree_format["class"]
if self.format is None:
# Pick the first one as the default.
self.format = tree_format.FORMATS[0]["class"]
_chosen_format = tree_format.FORMATS[0]["type"]
self.format = treedoc.FORMATS[0]["class"]
_chosen_format = treedoc.FORMATS[0]["type"]
else:
self.format = None
if _chosen_format and _format_str:
+1 -1
View File
@@ -225,7 +225,7 @@ GTK_GETTEXT_DOMAIN = 'gtk30'
#
#-------------------------------------------------------------------------
COPYRIGHT_MSG = "© 2001-2006 Donald N. Allingham\n" \
"© 2007-2019 The Gramps Developers"
"© 2007-2020 The Gramps Developers"
COMMENTS = _("Gramps\n (Genealogical Research and Analysis "
"Management Programming System)\n"
"is a personal genealogy program.")
+11 -6
View File
@@ -35,6 +35,7 @@ import logging
# Gramps modules
#
#-------------------------------------------------------------------------
from ..utils.grampslocale import GrampsLocale
from ..const import GRAMPS_LOCALE as glocale
_ = glocale.translation.sgettext
# import prerequisites for localized handlers
@@ -72,16 +73,20 @@ from . import _date_uk
from . import _date_zh_CN
from . import _date_zh_TW
# the following makes sure we use the LC_TIME value for date display & parsing
dlocale = GrampsLocale(lang=glocale.calendar)
# Initialize global parser
try:
if LANG in LANG_TO_PARSER:
parser = LANG_TO_PARSER[LANG](plocale=glocale)
parser = LANG_TO_PARSER[LANG](plocale=dlocale)
else:
parser = LANG_TO_PARSER[LANG_SHORT](plocale=glocale)
parser = LANG_TO_PARSER[LANG_SHORT](plocale=dlocale)
except:
logging.warning(
_("Date parser for '%s' not available, using default") % LANG)
parser = LANG_TO_PARSER["C"](plocale=glocale)
parser = LANG_TO_PARSER["C"](plocale=dlocale)
# Initialize global displayer
try:
@@ -92,13 +97,13 @@ except:
try:
if LANG in LANG_TO_DISPLAY:
displayer = LANG_TO_DISPLAY[LANG](val, blocale=glocale)
displayer = LANG_TO_DISPLAY[LANG](val, blocale=dlocale)
else:
displayer = LANG_TO_DISPLAY[LANG_SHORT](val, blocale=glocale)
displayer = LANG_TO_DISPLAY[LANG_SHORT](val, blocale=dlocale)
except:
logging.warning(
_("Date displayer for '%s' not available, using default") % LANG)
displayer = LANG_TO_DISPLAY["C"](val, blocale=glocale)
displayer = LANG_TO_DISPLAY["C"](val, blocale=dlocale)
# Import utility functions
+20
View File
@@ -50,6 +50,15 @@ class DateParserCZ(DateParser):
Converts a text string into a Date object
"""
quality_to_int = {
'přibližně' : Date.QUAL_ESTIMATED,
'odhadem' : Date.QUAL_ESTIMATED,
'odh.' : Date.QUAL_ESTIMATED,
'vypočteno' : Date.QUAL_CALCULATED,
'vypočtené' : Date.QUAL_CALCULATED,
'vyp.' : Date.QUAL_CALCULATED,
}
bce = ["před naším letopočtem", "před Kristem",
"př. n. l.", "př. Kr."] + DateParser.bce
@@ -58,6 +67,17 @@ class DateParserCZ(DateParser):
# bug 9739 grampslocale.py gets '%-d.%-m.%Y' -- makes it be '%/d.%/m.%Y'
self.dhformat = self.dhformat.replace('/', '') # so counteract that
def init_strings(self):
DateParser.init_strings(self)
self._text2 = re.compile(r'(\d+)?\.?\s+?%s\.?\s*((\d+)(/\d+)?)?\s*$'
% self._mon_str, re.IGNORECASE)
self._span = re.compile(
r"(od)\s+(?P<start>.+)\s+(do)\s+(?P<stop>.+)",
re.IGNORECASE)
self._range = re.compile(
r"(mezi)\s+(?P<start>.+)\s+(a)\s+(?P<stop>.+)",
re.IGNORECASE)
#-------------------------------------------------------------------------
#
# Czech display
+5 -4
View File
@@ -52,7 +52,6 @@ methods should be changed to generate exceptions. Possibly by globally changing
#
#-------------------------------------------------------------------------
import logging
import os
import inspect
from abc import ABCMeta
from types import FunctionType
@@ -160,10 +159,12 @@ def wrapper(method):
"""
class_name = args[0].__class__.__name__
func_name = method.__name__
caller_frame = inspect.stack()[1]
frame = inspect.currentframe()
c_frame = frame.f_back
c_code = c_frame.f_code
LOG.debug('calling %s.%s()... from file %s, line %s in %s',
class_name, func_name, os.path.split(caller_frame[1])[1],
caller_frame[2], caller_frame[3])
class_name, func_name, c_code.co_filename, c_frame.f_lineno,
c_code.co_name)
return method(*args, **keywargs)
return wrapped
+8 -1
View File
@@ -47,6 +47,7 @@ from . import (DbReadBase, DbWriteBase, DbUndo, DBLOGNAME, DBUNDOFN,
REPOSITORY_KEY, NOTE_KEY, TAG_KEY, TXNADD, TXNUPD, TXNDEL,
KEY_TO_NAME_MAP, DBMODE_R, DBMODE_W)
from .utils import write_lock_file, clear_lock_file
from .exceptions import DbVersionError
from ..errors import HandleError
from ..utils.callback import Callback
from ..updatecallback import UpdateCallback
@@ -534,7 +535,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
self.undo_history_callback = None
self.modified = 0
self.transaction = None
self.abort_possible = False
self.abort_possible = True
self._bm_changes = 0
self.has_changed = False
self.surname_list = []
@@ -659,6 +660,12 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
self.db_is_open = True
# Check on db version to see if too new
dbversion = int(self._get_metadata('version', default='0'))
if dbversion > self.VERSION[0]:
self.close()
raise DbVersionError(dbversion, 18, self.VERSION[0])
def _close(self):
"""
Close database backend.
+6 -8
View File
@@ -78,15 +78,13 @@ class DbTxn(defaultdict):
elapsed_time = time.time() - self.start_time
if __debug__:
caller_frame = inspect.stack()[1]
frame = inspect.currentframe()
c_frame = frame.f_back
c_code = c_frame.f_code
_LOG.debug(" **** DbTxn %s exited. Called from file %s, "
"line %s, in %s **** %.2f seconds" %
((hex(id(self)),)+
(os.path.split(caller_frame[1])[1],)+
tuple(caller_frame[i] for i in range(2, 4))+
(elapsed_time,)
)
)
"line %s, in %s **** %.2f seconds",
hex(id(self)), c_code.co_filename, c_frame.f_lineno,
c_code.co_name, elapsed_time)
return False
+11 -7
View File
@@ -42,6 +42,8 @@ from ..const import PLUGINS_DIR, USER_PLUGINS
from ..constfunc import win, get_env_var
from ..config import config
from .dbconst import DBLOGNAME, DBLOCKFN, DBBACKEND
from ..const import GRAMPS_LOCALE as glocale
_ = glocale.translation.gettext
#-------------------------------------------------------------------------
#
@@ -70,12 +72,14 @@ def make_database(plugin_id):
database = getattr(mod, pdata.databaseclass)
db = database()
import inspect
caller_frame = inspect.stack()[1]
frame = inspect.currentframe()
c_frame = frame.f_back
c_code = c_frame.f_code
_LOG.debug("Database class instance created Class:%s instance:%s. "
"Called from File %s, line %s, in %s"
% ((db.__class__.__name__, hex(id(db)))
+ (os.path.split(caller_frame[1])[1],)
+ tuple(caller_frame[i] for i in range(2, 4))))
"Called from File %s, line %s, in %s",
db.__class__.__name__, hex(id(db)), c_code.co_filename,
c_frame.f_lineno, c_code.co_name)
return db
else:
raise Exception("can't load database backend: '%s'" % plugin_id)
@@ -209,8 +213,8 @@ def write_lock_file(name):
if win():
user = get_env_var('USERNAME')
host = get_env_var('USERDOMAIN')
if host is None:
host = ""
if not user:
user = _("Unknown")
else:
host = os.uname()[1]
# An ugly workaround for os.getlogin() issue with Konsole
+5 -4
View File
@@ -29,7 +29,6 @@ Provide the database state class
#
#------------------------------------------------------------------------
import sys
import os
import logging
import inspect
@@ -88,10 +87,12 @@ class DbState(Callback):
"""
class_name = self.__class__.__name__
func_name = "is_open"
caller_frame = inspect.stack()[1]
frame = inspect.currentframe()
c_frame = frame.f_back
c_code = c_frame.f_code
_LOG.debug('calling %s.%s()... from file %s, line %s in %s',
class_name, func_name, os.path.split(caller_frame[1])[1],
caller_frame[2], caller_frame[3])
class_name, func_name, c_code.co_filename, c_frame.f_lineno,
c_code.co_name)
return (self.db is not None) and self.db.is_open()
def change_database(self, database):
@@ -41,9 +41,9 @@ from .. import Rule
class IsDefaultPerson(Rule):
"""Rule that checks for a default person in the database"""
name = _('Default person')
name = _('Home Person')
category = _('General filters')
description = _("Matches the default person")
description = _("Matches the Home Person")
def prepare(self, db, user):
p = db.get_default_person()
@@ -44,10 +44,10 @@ class IsLessThanNthGenerationAncestorOfDefaultPerson(Rule):
not more than N generations away"""
labels = [ _('Number of generations:') ]
name = _('Ancestors of the default person '
name = _('Ancestors of the Home Person '
'not more than <N> generations away')
category = _('Ancestral filters')
description = _("Matches ancestors of the default person "
description = _("Matches ancestors of the Home Person "
"not more than N generations away")
def prepare(self, db, user):
@@ -52,7 +52,7 @@ class MatchesEventFilter(MatchesEventFilterBase):
name = _('Persons with events matching the <event filter>')
description = _("Matches persons who have events that match a certain"
" event filter")
category = _('General filters')
category = _('Event filters')
# we want to have this filter show event filters
namespace = 'Event'
@@ -99,7 +99,8 @@ class BaseTest(unittest.TestCase):
stime = perf_counter()
results = filter_.apply(self.db)
if __debug__:
rulename = inspect.stack()[1][3]
frame = inspect.currentframe()
rulename = frame.f_back.f_code.co_name
print("%s: %.2f\n" % (rulename, perf_counter() - stime))
return set(results)
+4 -2
View File
@@ -288,10 +288,12 @@ class GrampsType(object, metaclass=GrampsTypeMeta):
else:
return self.__value == value[0]
else:
if value.value == self._CUSTOM:
if value.value == self._CUSTOM and self.__value == self._CUSTOM:
return self.__string == value.string
else:
elif value.value != self._CUSTOM and self.__value != self._CUSTOM:
return self.__value == value.value
else:
return False
def __ne__(self, value):
return not self.__eq__(value)
+1
View File
@@ -299,6 +299,7 @@ class StyledText:
"""
if self._tags:
the_tags = [tag.serialize() for tag in self._tags]
the_tags.sort()
else:
the_tags = []
+3 -3
View File
@@ -64,11 +64,11 @@ class Test1(unittest.TestCase):
C = self.C.join([self.A, self.S, deepcopy(self.B)])
C = C.replace('X', StyledText('_', [self.T3]))
_C = ('123_456\ncleartext\nabc_def',
[((1, ''), 'v1', [(0, 2), (2, 3)]),
((0, ''), 'v3', [(3, 4)]),
[((0, ''), 'v3', [(3, 4)]),
((0, ''), 'v3', [(21, 22)]),
((1, ''), 'v1', [(0, 2), (2, 3)]),
((1, ''), 'v1', [(4, 6)]),
((2, ''), 'v2', [(19, 21), (18, 21)]),
((0, ''), 'v3', [(21, 22)]),
((2, ''), 'v2', [(22, 23), (22, 25)])])
self.assertEqual(C.serialize(), _C)
+1 -1
View File
@@ -83,7 +83,7 @@ class BasePluginManager:
def __init__(self):
""" This function should only be run once by get_instance() """
if BasePluginManager.__instance is not 1:
if BasePluginManager.__instance != 1:
raise Exception("This class is a singleton. "
"Use the get_instance() method")
+1 -1
View File
@@ -1135,7 +1135,7 @@ class PluginRegister:
def __init__(self):
""" This function should only be run once by get_instance() """
if PluginRegister.__instance is not 1:
if PluginRegister.__instance != 1:
raise Exception("This class is a singleton. "
"Use the get_instance() method")
self.stable_only = True
+8 -4
View File
@@ -113,6 +113,10 @@ else:
_GS_CMD = where_is("gs")
def esc(id_txt):
return id_txt.replace('"', '\\"')
#------------------------------------------------------------------------------
#
# GVOptions
@@ -575,7 +579,7 @@ class GVDocBase(BaseDoc, GVDoc):
text += ' URL="%s"' % url
text += " ]"
self.write(' "%s" %s;\n' % (node_id, text))
self.write(' "%s" %s;\n' % (esc(node_id), text))
def add_link(self, id1, id2, style="", head="", tail="", comment=""):
"""
@@ -583,7 +587,7 @@ class GVDocBase(BaseDoc, GVDoc):
Implements GVDocBase.add_link().
"""
self.write(' "%s" -> "%s"' % (id1, id2))
self.write(' "%s" -> "%s"' % (esc(id1), esc(id2)))
if style or head or tail:
self.write(' [')
@@ -635,7 +639,7 @@ class GVDocBase(BaseDoc, GVDoc):
Implements GVDocBase.add_samerank().
"""
self.write(' {rank=same "%s" "%s"}\n' % (id1, id2))
self.write(' {rank=same "%s" "%s"}\n' % (esc(id1), esc(id2)))
def rewrite_label(self, id, label):
"""
@@ -643,7 +647,7 @@ class GVDocBase(BaseDoc, GVDoc):
Implements GVDocBase.rewrite_label().
"""
self.write(' "%s" [label = "%s"]\n' % (id, label))
self.write(' "%s" [label = "%s"]\n' % (esc(id), label))
def start_subgraph(self, graph_id):
""" Implement GVDocBase.start_subgraph() """
+2 -1
View File
@@ -302,7 +302,7 @@ class TreeDocBase(BaseDoc, TreeDoc):
name = paper_size.get_name().lower()
if name == 'custom size':
width = str(paper_size.get_width())
height = str(paper_size.get_width())
height = str(paper_size.get_height())
paper = 'papersize={%scm,%scm}' % (width, height)
elif name in ('a', 'b', 'c', 'd', 'e'):
paper = 'ansi' + name + 'paper'
@@ -519,6 +519,7 @@ class TreeDocBase(BaseDoc, TreeDoc):
date_str = date_str + '/' + stop_date
place = escape(_pd.display_event(db, event))
place = place.replace("-", "\--")
if modifier:
event_type += '+'
+3
View File
@@ -62,6 +62,7 @@ class EnumeratedListOption(Option):
:type value: int
:return: nothing
"""
self.ini_value = value
Option.__init__(self, label, value)
self.__items = []
self.__xml_items = []
@@ -138,6 +139,8 @@ class EnumeratedListOption(Option):
"""
if value in (v for v, d in self.__items):
Option.set_value(self, value)
elif value == self.ini_value:
return
else:
logging.warning(_("Value '%(val)s' not found for option '%(opt)s'") %
{'val' : str(value), 'opt' : self.get_label()})
+5
View File
@@ -769,6 +769,7 @@ def sanitize_citation(db, citation):
new_citation.set_gramps_id(citation.get_gramps_id())
new_citation.set_handle(citation.get_handle())
new_citation.set_change_time(citation.get_change_time())
new_citation.set_tag_list(citation.get_tag_list())
copy_srcattributes(db, citation, new_citation)
copy_notes(db, citation, new_citation)
copy_media_ref_list(db, citation, new_citation)
@@ -914,6 +915,7 @@ def sanitize_source(db, source):
new_source.set_gramps_id(source.get_gramps_id())
new_source.set_handle(source.get_handle())
new_source.set_change_time(source.get_change_time())
new_source.set_tag_list(source.get_tag_list())
for repo_ref in source.get_reporef_list():
if repo_ref and not repo_ref.get_privacy():
@@ -987,6 +989,7 @@ def sanitize_place(db, place):
new_place.set_type(place.get_type())
new_place.set_code(place.get_code())
new_place.set_placeref_list(place.get_placeref_list())
new_place.set_tag_list(place.get_tag_list())
copy_citation_ref_list(db, place, new_place)
copy_notes(db, place, new_place)
@@ -1017,6 +1020,7 @@ def sanitize_event(db, event):
new_event.set_handle(event.get_handle())
new_event.set_date_object(event.get_date_object())
new_event.set_change_time(event.get_change_time())
new_event.set_tag_list(event.get_tag_list())
copy_citation_ref_list(db, event, new_event)
copy_notes(db, event, new_event)
@@ -1120,6 +1124,7 @@ def sanitize_repository(db, repository):
new_repository.set_gramps_id(repository.get_gramps_id())
new_repository.set_handle(repository.get_handle())
new_repository.set_change_time(repository.get_change_time())
new_repository.set_tag_list(repository.get_tag_list())
copy_notes(db, repository, new_repository)
copy_addresses(db, repository, new_repository)
+10 -6
View File
@@ -324,12 +324,16 @@ class Callback:
return
# Check signal exists
frame = inspect.currentframe()
c_frame = frame.f_back
c_code = c_frame.f_code
frame_info = (c_code.co_filename, c_frame.f_lineno, c_code.co_name)
if signal_name not in self.__signal_map:
self._warn("Attempt to emit to unknown signal: %s\n"
" from: file: %s\n"
" line: %d\n"
" func: %s\n"
% ((str(signal_name), ) + inspect.stack()[1][1:4]))
% ((str(signal_name), ) + frame_info))
return
# check that the signal is not already being emitted. This prevents
@@ -340,7 +344,7 @@ class Callback:
" from: file: %s\n"
" line: %d\n"
" func: %s\n"
% ((str(signal_name), ) + inspect.stack()[1][1:4]))
% ((str(signal_name), ) + frame_info))
return
try:
@@ -358,7 +362,7 @@ class Callback:
" from: file: %s\n"
" line: %d\n"
" func: %s\n"
% ((str(signal_name), ) + inspect.stack()[1][1:4]))
% ((str(signal_name), ) + frame_info))
return
# type check arguments
@@ -369,7 +373,7 @@ class Callback:
" from: file: %s\n"
" line: %d\n"
" func: %s\n"
% ((str(signal_name), ) + inspect.stack()[1][1:4]))
% ((str(signal_name), ) + frame_info))
return
if len(args) > 0:
@@ -379,7 +383,7 @@ class Callback:
" from: file: %s\n"
" line: %d\n"
" func: %s\n"
% ((str(signal_name), ) + inspect.stack()[1][1:4]))
% ((str(signal_name), ) + frame_info))
return
if arg_types is not None:
@@ -391,7 +395,7 @@ class Callback:
" line: %d\n"
" func: %s\n"
" arg passed was: %s, type of arg passed %s, type should be: %s\n"
% ((str(signal_name), ) + inspect.stack()[1][1:4] +\
% ((str(signal_name), ) + frame_info +\
(args[i], repr(type(args[i])), repr(arg_types[i]))))
return
if signal_name in self.__callback_map:
+1 -1
View File
@@ -117,7 +117,7 @@ _LOCALE_NAMES = {
_RTL_LOCALES = ('ar', 'he')
# locales with less than 70% currently translated
INCOMPLETE_TRANSLATIONS = ('ar', 'bg', 'he', 'ja', 'sq', 'ta', 'tr')
INCOMPLETE_TRANSLATIONS = ('ar', 'bg', 'he', 'sq', 'ta', 'tr')
def _check_mswin_locale(locale):
msloc = None
+1 -1
View File
@@ -126,7 +126,7 @@ if win():
pass # ok
elif not os.path.isdir(HOME_DIR):
os.makedirs(HOME_DIR)
sys.stdout = sys.stderr = open(logfile, "w")
sys.stdout = sys.stderr = open(logfile, "w", encoding='utf-8')
stderrh = logging.StreamHandler(sys.stderr)
stderrh.setFormatter(form)
stderrh.setLevel(logging.DEBUG)
+38 -21
View File
@@ -471,27 +471,36 @@ class ClipCitation(ClipHandleWrapper):
def refresh(self):
if self._handle:
citation = clipdb.get_citation_from_handle(self._handle)
if citation:
self._title = citation.get_gramps_id()
notelist = list(map(clipdb.get_note_from_handle,
citation.get_note_list()))
srctxtlist = [note for note in notelist
if note.get_type() == NoteType.SOURCE_TEXT]
page = citation.get_page()
if not page:
page = _('not available|NA')
text = ""
if srctxtlist:
text = " ".join(srctxtlist[0].get().split())
#String must be unicode for truncation to work for non
#ascii characters
text = str(text)
if len(text) > 60:
text = text[:60] + "..."
self._value = _("Volume/Page: %(pag)s -- %(sourcetext)s") % {
'pag' : page,
'sourcetext' : text}
try:
citation = clipdb.get_citation_from_handle(self._handle)
if citation:
self._title = citation.get_gramps_id()
notelist = list(map(clipdb.get_note_from_handle,
citation.get_note_list()))
srctxtlist = [note for note in notelist
if note.get_type() == NoteType.SOURCE_TEXT]
page = citation.get_page()
if not page:
page = _('not available|NA')
text = ""
if srctxtlist:
text = " ".join(srctxtlist[0].get().split())
#String must be unicode for truncation to work for non
#ascii characters
text = str(text)
if len(text) > 60:
text = text[:60] + "..."
self._value = _("Volume/Page: %(pag)s -- %(sourcetext)s"
) % { 'pag' : page,
'sourcetext' : text}
except:
# We are in the Source tree view. The shortcuts only
# work for citations.
print("We cannot copy the source from this view."
" Use drag and drop.")
self._title = self._value = ''
self._pickle = self._type = self._objclass = None
self._handle = self._dbid = self._dbname = None
class ClipRepoRef(ClipObjWrapper):
@@ -1281,6 +1290,14 @@ class ClipboardListView:
model.insert_before(node, data)
else:
model.insert_after(node, data)
elif isinstance(data[1], ClipCitation):
if data[3]:
# we have a real citation
model.append(data)
#else:
# We are in a Source treeview and trying
# to copy a source with a shortcut.
# Use drag and drop to do that.
else:
model.append(data)
+2 -2
View File
@@ -1241,7 +1241,7 @@ class GrampsPreferences(ConfigureDialog):
row, 'preferences.place-auto', start=0, stop=1,
extra_callback=self.auto_title_changed,
tooltip=_("Enables automatic place title generation "
"using specifed format."))
"using specified format."))
self.auto_title_changed(cb_widget)
hbox.pack_start(self.pformat, True, True, 0)
hbox.pack_start(self.fmt_btn, False, False, 0)
@@ -1573,7 +1573,7 @@ class GrampsPreferences(ConfigureDialog):
self.add_checkbox(grid, _('Add tag on import'), current_line,
cb_const, stop=2,
extra_callback=self.toggle_tag_on_import,
tooltip=_("Specifed tag will be added on import.\n"
tooltip=_("Specified tag will be added on import.\n"
"Clear to set default value."))
grid.attach(self.tag_format_entry, 2, current_line, 1, 1)
+9 -5
View File
@@ -317,6 +317,13 @@ def add_all_files_filter(chooser):
mime_filter.add_pattern('*')
chooser.add_filter(mime_filter)
def icase(ext):
"""
Return a glob reresenting a case insensitive file extension.
"""
return ''.join(['[{}{}]'.format(s.lower(), s.upper()) for s in ext])
#-------------------------------------------------------------------------
#
# Format selectors: explictly set the format of the file
@@ -446,8 +453,7 @@ class GrampsImportFileDialog(ManagedWindow):
file_filter = Gtk.FileFilter()
name = "%s (.%s)" % (plugin.get_name(), plugin.get_extension())
file_filter.set_name(name)
file_filter.add_pattern("*.%s" % plugin.get_extension())
file_filter.add_pattern(plugin.get_extension().capitalize())
file_filter.add_pattern("*.%s" % icase(plugin.get_extension()))
import_dialog.add_filter(file_filter)
(box, type_selector) = format_maker()
@@ -526,7 +532,7 @@ class GrampsImportFileDialog(ManagedWindow):
return True
else:
try:
f = file(filename,'w')
f = open(filename, 'w')
f.close()
os.remove(filename)
except IOError:
@@ -542,7 +548,6 @@ class GrampsImportFileDialog(ManagedWindow):
self.import_info = None
self._begin_progress()
self.uistate.set_sensitive(False)
self.uistate.viewmanager.enable_menu(False)
try:
#an importer can return an object with info, object.info_text()
@@ -563,7 +568,6 @@ class GrampsImportFileDialog(ManagedWindow):
except Exception:
_LOG.error("Failed to import database.", exc_info=True)
self.uistate.set_sensitive(True)
self.uistate.viewmanager.enable_menu(True)
self._end_progress()
def build_menu_names(self, obj): # this is meaningless since it's modal
+1 -1
View File
@@ -1013,7 +1013,7 @@ class DbManager(CLIDbManager, ManagedWindow):
"""
Handle the reception of drag data
"""
drag_value = selection.get_data().decode()
drag_value = selection.get_data().decode().strip(' \r\n\x00')
fname = None
type = None
title = None
+4 -1
View File
@@ -520,7 +520,10 @@ class DisplayState(Callback):
history.push(handle)
def set_sensitive(self, state):
self.window.set_sensitive(state)
tbar = self.uimanager.get_widget('ToolBar')
tbar.set_sensitive(state)
self.viewmanager.hpane.set_sensitive(state)
self.uimanager.enable_all_actions(state)
def db_changed(self, db):
db.connect('long-op-start', self.progress_monitor.add_op)
@@ -46,7 +46,7 @@ from html import escape
#
#-------------------------------------------------------------------------
from ...widgets.undoablebuffer import UndoableBuffer
from gramps.gen.lib import EventRoleType
from gramps.gen.lib import (EventRoleType, EventType, Date)
from gramps.gen.datehandler import get_date, get_date_valid
from gramps.gen.config import config
from gramps.gen.utils.db import get_participant_from_event
@@ -175,7 +175,12 @@ class EventRefModel(Gtk.TreeStore):
"""
date = event.get_date_object()
if date and self.start_date:
return (date - self.start_date).format(precision=age_precision)
if (date == self.start_date and date.modifier == Date.MOD_NONE
and not (event.get_type().is_death_fallback() or
event.get_type() == EventType.DEATH)):
return ""
else:
return (date - self.start_date).format(precision=age_precision)
else:
return ""
+10 -9
View File
@@ -38,7 +38,7 @@ from gramps.gen.lib import EventType, NoteType
from gramps.gen.db import DbTxn
from ..glade import Glade
from .displaytabs import (CitationEmbedList, NoteTab, GalleryTab,
EventBackRefList, AttrEmbedList)
EventBackRefList, EventAttrEmbedList)
from ..widgets import (PrivacyButton, MonitoredEntry,
MonitoredDate, MonitoredDataType, MonitoredTagList)
from .editreference import RefTab, EditReference
@@ -209,10 +209,10 @@ class EditEventRef(EditReference):
self._add_tab(notebook, self.srcref_list)
self.track_ref_for_deletion("srcref_list")
self.attr_list = AttrEmbedList(self.dbstate,
self.uistate,
self.track,
self.source.get_attribute_list())
self.attr_list = EventAttrEmbedList(self.dbstate,
self.uistate,
self.track,
self.source.get_attribute_list())
self._add_tab(notebook, self.attr_list)
self.track_ref_for_deletion("attr_list")
@@ -247,10 +247,11 @@ class EditEventRef(EditReference):
self._add_tab(notebook, self.backref_tab)
self.track_ref_for_deletion("backref_tab")
self.attr_ref_list = AttrEmbedList(self.dbstate,
self.uistate,
self.track,
self.source_ref.get_attribute_list())
self.attr_ref_list = EventAttrEmbedList(
self.dbstate,
self.uistate,
self.track,
self.source_ref.get_attribute_list())
self._add_tab(notebook_ref, self.attr_ref_list)
self.track_ref_for_deletion("attr_ref_list")
+9
View File
@@ -39,6 +39,9 @@ from ..glade import Glade
from gramps.gen.simple import SimpleAccess
from gramps.gen.const import URL_MANUAL_SECT2
import logging
_LOG = logging.getLogger("editlink")
#-------------------------------------------------------------------------
#
# Constants
@@ -154,6 +157,12 @@ class EditLink(ManagedWindow):
def _on_new_callback(self, obj):
object_class = obj.__class__.__name__
# workaround for bug12260
try:
test = obj.handle
except AttributeError:
_LOG.warn(str(object_class))
return
self.selected.set_text(self.display_link(
object_class, "handle", obj.handle))
self.url_link.set_text("gramps://%s/%s/%s" %
+5 -3
View File
@@ -187,9 +187,11 @@ class EditPlace(EditPrimary):
def set_latlongitude(self, value):
try:
coma = value.index(',')
self.longitude.set_text(value[coma+1:].strip())
self.latitude.set_text(value[:coma].strip())
coma = value.index(', ')
longitude = value[coma+2:].strip().replace(',','.')
latitude = value[:coma].strip().replace(',','.')
self.longitude.set_text(longitude)
self.latitude.set_text(latitude)
self.top.get_object("lat_entry").validate(force=True)
self.top.get_object("lon_entry").validate(force=True)
self.obj.set_latitude(self.latitude.get_value())
+5 -3
View File
@@ -180,9 +180,11 @@ class EditPlaceRef(EditReference):
def set_latlongitude(self, value):
try:
coma = value.index(',')
self.longitude.set_text(value[coma+1:].strip())
self.latitude.set_text(value[:coma].strip())
coma = value.index(', ')
longitude = value[coma+2:].strip().replace(',','.')
latitude = value[:coma].strip().replace(',','.')
self.longitude.set_text(longitude)
self.latitude.set_text(latitude)
self.top.get_object("lat_entry").validate(force=True)
self.top.get_object("lon_entry").validate(force=True)
self.source.set_latitude(self.latitude.get_value())
+5 -3
View File
@@ -1,11 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<!-- Generated with glade 3.22.2 -->
<interface>
<requires lib="gtk+" version="3.10"/>
<requires lib="grampswidgets" version="0.0"/>
<object class="GtkDialog" id="editplace">
<property name="can_focus">False</property>
<property name="type_hint">dialog</property>
<child type="titlebar">
<placeholder/>
</child>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox19">
<property name="visible">True</property>
@@ -101,7 +103,7 @@
<child>
<object class="GtkLabel" id="comment1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Either use the two fields below to enter coordinates (latitude and longitude),</property>
<property name="hexpand">True</property>
+22
View File
@@ -32,6 +32,14 @@ the create/deletion of dialog windows.
import os
from io import StringIO
import html
import logging
#-------------------------------------------------------------------------
#
# Set up logging
#
#-------------------------------------------------------------------------
_LOG = logging.getLogger(".")
#-------------------------------------------------------------------------
#
# GNOME/GTK
@@ -575,6 +583,9 @@ class ManagedWindow:
Takes care of closing children and removing itself from menu.
"""
if hasattr(self, 'opened') and not self.opened:
_LOG.warning("Tried to close a ManagedWindow more than once.")
return # in case close somehow gets called again
self.opened = False
self._save_position(save_config=False) # the next line will save it
self._save_size()
@@ -622,6 +633,17 @@ class ManagedWindow:
if self.horiz_position_key is not None:
horiz_position = config.get(self.horiz_position_key)
vert_position = config.get(self.vert_position_key)
# make sure some of left side shows on screen
# for part time multi monitor setups
screen = Gtk.Window().get_screen()
s_width = screen.get_width()
s_height = screen.get_height()
if horiz_position > s_width - 50 or vert_position > s_height - 50:
(p_width, p_height) = self.parent_window.get_size()
(p_horiz, p_vert) = self.parent_window.get_position()
(w_width, w_height) = self.window.get_size()
horiz_position = p_horiz + ((p_width - w_width) // 2)
vert_position = p_vert + ((p_height - w_height) // 2)
self.window.move(horiz_position, vert_position)
def _save_position(self, save_config=True):
+2 -1
View File
@@ -1756,7 +1756,8 @@ class GuiDestinationOption(Gtk.Box):
name = get_curr_dir
fcd.set_current_folder(name)
else:
fcd.set_current_name(name)
fcd.set_current_name(os.path.basename(name))
fcd.set_current_folder(os.path.dirname(name))
status = fcd.run()
if status == Gtk.ResponseType.OK:
+9 -4
View File
@@ -814,9 +814,12 @@ class ToolManagedWindowBase(ManagedWindow):
buffer_location = view.window_to_buffer_coords(Gtk.TextWindowType.TEXT,
int(event.x),
int(event.y))
iter = view.get_iter_at_location(*buffer_location)
_iter = view.get_iter_at_location(*buffer_location)
if isinstance(_iter, tuple): # Gtk changed api in recent versions
_iter = _iter[1]
for (tag, person_handle) in self.tags:
if iter.has_tag(tag):
if _iter.has_tag(tag):
_window = view.get_window(Gtk.TextWindowType.TEXT)
_window.set_cursor(self.link_cursor)
return False # handle event further, if necessary
@@ -827,9 +830,11 @@ class ToolManagedWindowBase(ManagedWindow):
buffer_location = view.window_to_buffer_coords(Gtk.TextWindowType.TEXT,
int(event.x),
int(event.y))
iter = view.get_iter_at_location(*buffer_location)
_iter = view.get_iter_at_location(*buffer_location)
if isinstance(_iter, tuple): # Gtk changed api in recent versions
_iter = _iter[1]
for (tag, person_handle) in self.tags:
if iter.has_tag(tag):
if _iter.has_tag(tag):
person = self.db.get_person_from_handle(person_handle)
if event.button == 1:
if event.type == Gdk.EventType.DOUBLE_BUTTON_PRESS:
+5 -5
View File
@@ -586,11 +586,11 @@ class ExportAssistant(ManagedWindow, Gtk.Assistant):
ix = self.get_selected_format_index()
config.set('behavior.recent-export-type', ix)
export_function = self.map_exporters[ix].get_export_function()
success = export_function(self.dbstate.db,
filename,
User(error=ErrorDialog, parent=self.uistate.window,
callback=self.callback),
self.option_box_instance)
success = export_function(
self.dbstate.db, filename,
User(error=ErrorDialog, parent=self.window,
callback=self.callback),
self.option_box_instance)
except:
#an error not catched in the export_function itself
success = False
+1 -1
View File
@@ -71,7 +71,7 @@ class GuiPluginManager(Callback):
def __init__(self):
""" This function should only be run once by get_instance() """
if GuiPluginManager.__instance is not 1:
if GuiPluginManager.__instance != 1:
raise Exception("This class is a singleton. "
"Use the get_instance() method")
-1
View File
@@ -325,7 +325,6 @@ class BaseSelector(ManagedWindow):
self.sortorder = Gtk.SortType.ASCENDING
else:
self.sortorder = Gtk.SortType.DESCENDING
self.model.reverse_order()
self.build_tree()
return True
+10
View File
@@ -496,6 +496,16 @@ class UIManager():
"""
return group.act_group.lookup_action(actionname)
def enable_all_actions(self, state):
for group in self.action_groups:
if group.act_group:
for item in group.actionlist:
action = group.act_group.lookup_action(item[ACTION_NAME])
if action:
# We check in case the group has not been inserted into
# UIManager yet
action.set_enabled(group.sensitive if state else False)
def dump_all_accels(self):
''' A function used diagnostically to see what accels are present.
This will only dump the current accel set, if other non-open windows
+1 -1
View File
@@ -450,7 +450,7 @@ def open_file_with_default_application(path, uistate):
GLib.timeout_add_seconds(1, poll_external, (proc, errstrings, uistate))
return
def process_pending_events(max_count=10):
def process_pending_events(max_count=20):
"""
Process pending events, but don't get into an infinite loop.
"""
+20 -62
View File
@@ -273,13 +273,13 @@ class ViewManager(CLIManager):
Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.MOD1_MASK)
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
self.window.add(vbox)
hpane = Gtk.Paned()
self.hpane = Gtk.Paned()
self.ebox = Gtk.EventBox()
self.navigator = Navigator(self)
self.ebox.add(self.navigator.get_top())
hpane.pack1(self.ebox, False, False)
hpane.show()
self.hpane.pack1(self.ebox, False, False)
self.hpane.show()
self.notebook = Gtk.Notebook()
self.notebook.set_scrollable(True)
@@ -288,14 +288,14 @@ class ViewManager(CLIManager):
self.__init_lists()
self.__build_ui_manager()
hpane.add2(self.notebook)
self.hpane.add2(self.notebook)
toolbar = self.uimanager.get_widget('ToolBar')
self.statusbar = Statusbar()
self.statusbar.show()
vbox.pack_end(self.statusbar, False, True, 0)
vbox.pack_start(toolbar, False, True, 0)
vbox.pack_end(hpane, True, True, 0)
vbox.show()
vbox.pack_end(self.hpane, True, True, 0)
vbox.show_all()
self.uistate = DisplayState(self.window, self.statusbar,
self.uimanager, self)
@@ -835,6 +835,7 @@ class ViewManager(CLIManager):
hbox.add(Gtk.Label(label=pdata.name))
hbox.show_all()
page_num = self.notebook.append_page(page.get_display(), hbox)
self.active_page.post_create()
if not self.file_loaded:
self.uimanager.set_actions_visible(self.actiongroup, False)
self.uimanager.set_actions_visible(self.readonlygroup, False)
@@ -875,9 +876,6 @@ class ViewManager(CLIManager):
"""
Perform necessary actions when a page is changed.
"""
if not self.dbstate.is_open():
return
self.__disconnect_previous_page()
self.active_page = self.pages[page_num]
@@ -961,8 +959,7 @@ class ViewManager(CLIManager):
self.dbstate.db.close(user=self.user)
(filename, title) = value
self.db_loader.read_file(filename)
if self.dbstate.db.is_open():
self._post_load_newdb(filename, 'x-directory/normal', title)
self._post_load_newdb(filename, 'x-directory/normal', title)
else:
if dialog.after_change != "":
# We change the title of the main window.
@@ -997,7 +994,8 @@ class ViewManager(CLIManager):
The method called after load of a new database.
Inherit CLI method to add GUI part
"""
self._post_load_newdb_nongui(filename, title)
if self.dbstate.db.is_open():
self._post_load_newdb_nongui(filename, title)
self._post_load_newdb_gui(filename, filetype, title)
def _post_load_newdb_gui(self, filename, filetype, title=None):
@@ -1012,11 +1010,16 @@ class ViewManager(CLIManager):
if title:
name = title
rw = not self.dbstate.db.readonly
if rw:
msg = "%s - Gramps" % name
isopen = self.dbstate.is_open()
if not isopen:
rw = False
msg = "Gramps"
else:
msg = "%s (%s) - Gramps" % (name, _('Read Only'))
rw = not self.dbstate.db.readonly
if rw:
msg = "%s - Gramps" % name
else:
msg = "%s (%s) - Gramps" % (name, _('Read Only'))
self.uistate.window.set_title(msg)
if(bool(config.get('behavior.runcheck')) and QuestionDialog2(
@@ -1035,7 +1038,7 @@ class ViewManager(CLIManager):
config.set('behavior.runcheck', False)
self.__change_page(self.notebook.get_current_page())
self.uimanager.set_actions_visible(self.actiongroup, rw)
self.uimanager.set_actions_visible(self.readonlygroup, True)
self.uimanager.set_actions_visible(self.readonlygroup, isopen)
self.uimanager.set_actions_visible(self.undoactions, rw)
self.uimanager.set_actions_visible(self.redoactions, rw)
@@ -1060,51 +1063,6 @@ class ViewManager(CLIManager):
config.set('paths.recent-file', '')
config.save()
def enable_menu(self, enable):
""" Enable/disable the menues. Used by the dbloader for import to
prevent other operations during import. Needed because simpler methods
don't work under Gnome with application menus at top of screen (instead
of Gramps window).
Note: enable must be set to False on first call.
"""
if not enable:
self.action_st = (
self.uimanager.get_actions_sensitive(self.actiongroup),
self.uimanager.get_actions_sensitive(self.readonlygroup),
self.uimanager.get_actions_sensitive(self.undoactions),
self.uimanager.get_actions_sensitive(self.redoactions),
self.uimanager.get_actions_sensitive(self.fileactions),
self.uimanager.get_actions_sensitive(self.toolactions),
self.uimanager.get_actions_sensitive(self.reportactions),
self.uimanager.get_actions_sensitive(
self.recent_manager.action_group))
self.uimanager.set_actions_sensitive(self.actiongroup, enable)
self.uimanager.set_actions_sensitive(self.readonlygroup, enable)
self.uimanager.set_actions_sensitive(self.undoactions, enable)
self.uimanager.set_actions_sensitive(self.redoactions, enable)
self.uimanager.set_actions_sensitive(self.fileactions, enable)
self.uimanager.set_actions_sensitive(self.toolactions, enable)
self.uimanager.set_actions_sensitive(self.reportactions, enable)
self.uimanager.set_actions_sensitive(
self.recent_manager.action_group, enable)
else:
self.uimanager.set_actions_sensitive(
self.actiongroup, self.action_st[0])
self.uimanager.set_actions_sensitive(
self.readonlygroup, self.action_st[1])
self.uimanager.set_actions_sensitive(
self.undoactions, self.action_st[2])
self.uimanager.set_actions_sensitive(
self.redoactions, self.action_st[3])
self.uimanager.set_actions_sensitive(
self.fileactions, self.action_st[4])
self.uimanager.set_actions_sensitive(
self.toolactions, self.action_st[5])
self.uimanager.set_actions_sensitive(
self.reportactions, self.action_st[6])
self.uimanager.set_actions_sensitive(
self.recent_manager.action_group, self.action_st[7])
def __change_undo_label(self, label, update_menu=True):
"""
Change the UNDO label
+1 -1
View File
@@ -321,7 +321,7 @@ class NavigationView(PageView):
else:
from ..dialog import WarningDialog
WarningDialog(_("No Home Person"),
_("You need to set a 'default person' to go to. "
_("You need to set a 'Home Person' to go to. "
"Select the People View, select the person you want as "
"'Home Person', then confirm your choice "
"via the menu Edit -> Set Home Person."),
+14 -6
View File
@@ -138,6 +138,7 @@ class PageView(DbGUIElement, metaclass=ABCMeta):
self.sidebar = None
self.bottombar = None
self.widget = None
self.vpane = None
DbGUIElement.__init__(self, dbstate.db)
@@ -154,18 +155,20 @@ class PageView(DbGUIElement, metaclass=ABCMeta):
self.ident + "_bottombar",
defaults[1])
hpane = Gtk.Paned()
vpane = Gtk.Paned(orientation=Gtk.Orientation.VERTICAL)
hpane.pack1(vpane, resize=True, shrink=False)
self.vpane = Gtk.Paned(orientation=Gtk.Orientation.VERTICAL)
hpane.pack1(self.vpane, resize=True, shrink=False)
hpane.pack2(self.sidebar, resize=False, shrink=False)
hpane.show()
vpane.show()
self.vpane.show()
self.widget = self.build_widget()
self.widget.show_all()
self.widget.set_name('view')
vpane.pack1(self.widget, resize=True, shrink=False)
vpane.pack2(self.bottombar, resize=False, shrink=True)
self._setup_slider_config(vpane, 'vpane.slider-position')
self.vpane.pack1(self.widget, resize=True, shrink=False)
self.vpane.pack2(self.bottombar, resize=False, shrink=True)
self.vpane.show_all()
self._config.register('vpane.slider-position', -1)
self.vpane.set_position(self._config.get('vpane.slider-position'))
self.sidebar_toggled(self.sidebar.get_property('visible'))
self.hpane_sig = hpane.connect("draw", self.set_page_slider)
@@ -343,6 +346,11 @@ class PageView(DbGUIElement, metaclass=ABCMeta):
self.bottombar.set_inactive()
self.active = False
def post_create(self):
if self.vpane:
self._setup_slider_config(self.vpane, 'vpane.slider-position')
self.vpane = None
@abstractmethod
def build_tree(self):
"""
+2 -1
View File
@@ -130,7 +130,8 @@ class EventModel(FlatBaseModel):
handle = data[0]
cached, value = self.get_cached_value(handle, "PARTICIPANT")
if not cached:
value = get_participant_from_event(self.db, data[COLUMN_HANDLE])
value = get_participant_from_event(self.db, data[COLUMN_HANDLE],
all_=True) # all participants
self.set_cached_value(handle, "PARTICIPANT", value)
return value
+2 -1
View File
@@ -587,7 +587,8 @@ class TreeBaseModel(GObject.GObject, Gtk.TreeModel, BaseModel):
if dfilter:
cdb = CacheProxyDb(self.db)
for handle in dfilter.apply(cdb, tree=True,
user=User(parent=self.uistate.window)):
user=User(parent=self.uistate.window,
uistate=self.uistate)):
status_ppl.heartbeat()
data = data_map(handle)
add_func(handle, data)
+2 -2
View File
@@ -1473,7 +1473,7 @@ class GrampletPane(Gtk.ScrolledWindow):
plugs.sort(key=lambda x: x.name)
for plug in plugs:
action_name = valid_action_name(plug.id)
a_menuitems += menuitem % (action_name, plug.name)
a_menuitems += menuitem % (action_name, escape(plug.name))
actions.append((action_name,
make_callback(self.add_gramplet, plug.name)))
names = [gramplet.title for gramplet in self.closed_gramplets]
@@ -1484,7 +1484,7 @@ class GrampletPane(Gtk.ScrolledWindow):
# 'name' could be non-ASCII when in non-English language
# action names must be in ASCII, so use 'id' instead.
action_name = valid_action_name(str(id(name)))
r_menuitems += menuitem % (action_name, name)
r_menuitems += menuitem % (action_name, escape(name))
actions.append((action_name,
make_callback(self.restore_gramplet,
name)))
+6 -8
View File
@@ -29,7 +29,6 @@ BSDDBTxn class: Wrapper for BSDDB transaction-oriented methods
#-------------------------------------------------------------------------
import logging
import inspect
import os
#-------------------------------------------------------------------------
#
@@ -73,14 +72,13 @@ class BSDDBTxn:
"""
# Conditional on __debug__ because all that frame stuff may be slow
if __debug__:
caller_frame = inspect.stack()[1]
frame = inspect.currentframe()
c_frame = frame.f_back
c_code = c_frame.f_code
_LOG.debug(" BSDDBTxn %s instantiated. Called from file %s,"
" line %s, in %s" %
((hex(id(self)),)+
(os.path.split(caller_frame[1])[1],)+
(tuple(caller_frame[i] for i in range(2, 4)))
)
)
" line %s, in %s", hex(id(self)), c_code.co_filename,
c_frame.f_lineno, c_code.co_name)
self.env = env
self.db = db
self.txn = None
+4
View File
@@ -231,6 +231,10 @@ class DBAPI(DbGeneric):
_LOG.debug(" %sDBAPI %s transaction begin for '%s'",
"Batch " if transaction.batch else "",
hex(id(self)), transaction.get_description())
if transaction.batch:
# A batch transaction does not store the commits
# Aborting the session completely will become impossible.
self.abort_possible = False
self.transaction = transaction
self.dbapi.begin()
return transaction
+5 -1
View File
@@ -101,6 +101,7 @@ class Connection:
self.__cursor = self.__connection.cursor()
self.__connection.create_function("regexp", 2, regexp)
self.__collations = []
self.__tmap = str.maketrans('-.@=;', '_____')
self.check_collation(glocale)
def check_collation(self, locale):
@@ -110,7 +111,10 @@ class Connection:
:param locale: Locale to be checked.
:param type: A GrampsLocale object.
"""
collation = locale.get_collation()
#PySQlite3 permits only ascii alphanumerics and underscores in
#collation names so first translate any old-style Unicode locale
#delimiters to underscores.
collation = locale.get_collation().translate(self.__tmap)
if collation not in self.__collations:
self.__connection.create_collation(collation, locale.strcoll)
+4 -4
View File
@@ -31,7 +31,7 @@ SVG document generator.
#
#-------------------------------------------------------------------------
from io import StringIO
from xml.sax.saxutils import escape
#-------------------------------------------------------------------------
#
# Gramps modules
@@ -147,7 +147,7 @@ class SvgDrawDoc(BaseDoc, DrawDoc):
linex = xpos + (width - self.string_width(font, line)) / 2
self.buffer.write(
'<tspan x="%4.2f" dy="%d">' % (linex, size) +
line +
escape(line) +
'</tspan>'
)
self.buffer.write('</text>\n')
@@ -273,7 +273,7 @@ class SvgDrawDoc(BaseDoc, DrawDoc):
self.buffer.write(' font-family:serif;')
self.buffer.write(
'">' +
line +
escape(line) +
'</text>\n'
)
@@ -307,7 +307,7 @@ class SvgDrawDoc(BaseDoc, DrawDoc):
self.buffer.write('font-family:serif;')
self.buffer.write(
'">' +
text +
escape(text) +
'</text>\n'
)
+4 -10
View File
@@ -1250,20 +1250,14 @@ class GedcomWriter(UpdateCallback):
if start != Date.EMPTY:
cal = date.get_calendar()
mod = date.get_modifier()
quality = date.get_quality()
if quality in libgedcom.DATE_QUALITY:
qual_text = libgedcom.DATE_QUALITY[quality] + " "
else:
qual_text = ""
quality = None if mod else date.get_quality()
if mod == Date.MOD_SPAN:
val = "%sFROM %s TO %s" % (
qual_text,
val = "FROM %s TO %s" % (
libgedcom.make_gedcom_date(start, cal, mod, None),
libgedcom.make_gedcom_date(date.get_stop_date(),
cal, mod, None))
elif mod == Date.MOD_RANGE:
val = "%sBET %s AND %s" % (
qual_text,
val = "BET %s AND %s" % (
libgedcom.make_gedcom_date(start, cal, mod, None),
libgedcom.make_gedcom_date(date.get_stop_date(),
cal, mod, None))
@@ -1559,7 +1553,7 @@ class GedcomWriter(UpdateCallback):
@type addr: [a super-type of] LocationBase
"""
if addr.get_street() or addr.get_locality() or addr.get_city() or \
addr.get_state() or addr.get_postal_code or addr.get_country():
addr.get_state() or addr.get_postal_code() or addr.get_country():
self._writeln(level, 'ADDR', addr.get_street())
if addr.get_locality():
self._writeln(level + 1, 'CONT', addr.get_locality())
+29 -28
View File
@@ -179,34 +179,35 @@ class PackageWriter:
#---------------------------------------------------------------
try:
archive = tarfile.open(self.filename,'w:gz')
except EnvironmentError as msg:
with tarfile.open(self.filename, 'w:gz') as archive:
# Write media files first, since the database may be modified
# during the process (i.e. when removing object)
handles = self.db.get_media_handles(sort_handles=True)
for indx, m_id in enumerate(handles):
self.user.callback(indx * 100 / len(handles))
mobject = self.db.get_media_from_handle(m_id)
filename = media_path_full(self.db, mobject.get_path())
archname = str(mobject.get_path())
if os.path.isfile(filename) and os.access(filename,
os.R_OK):
archive.add(filename, archname, filter=fix_mtime)
# Write XML now
with BytesIO() as g:
gfile = XmlWriter(self.db, self.user, 2)
gfile.write_handle(g)
tarinfo = tarfile.TarInfo('data.gramps')
tarinfo.size = len(g.getvalue())
tarinfo.mtime = time.time()
if not win():
tarinfo.uid = os.getuid()
tarinfo.gid = os.getgid()
g.seek(0)
archive.addfile(tarinfo, g)
return True
except (EnvironmentError, OSError) as msg:
log.warning(str(msg))
self.user.notify_error(_('Failure writing %s') % self.filename, str(msg))
return 0
# Write media files first, since the database may be modified
# during the process (i.e. when removing object)
for m_id in self.db.get_media_handles(sort_handles=True):
mobject = self.db.get_media_from_handle(m_id)
filename = media_path_full(self.db, mobject.get_path())
archname = str(mobject.get_path())
if os.path.isfile(filename) and os.access(filename, os.R_OK):
archive.add(filename, archname, filter=fix_mtime)
# Write XML now
g = BytesIO()
gfile = XmlWriter(self.db, self.user, 2)
gfile.write_handle(g)
tarinfo = tarfile.TarInfo('data.gramps')
tarinfo.size = len(g.getvalue())
tarinfo.mtime = time.time()
if not win():
tarinfo.uid = os.getuid()
tarinfo.gid = os.getgid()
g.seek(0)
archive.addfile(tarinfo, g)
archive.close()
g.close()
return True
+1 -1
View File
@@ -202,7 +202,7 @@ class CalendarWriter:
date = event.get_date_object()
place_handle = event.get_place_handle()
date_string = self.format_date(date, 1)
if date_string is not "":
if date_string != "":
# self.writeln("")
self.writeln("BEGIN:VEVENT")
time_s = time.gmtime(event.change)
+1 -1
View File
@@ -376,7 +376,7 @@ class GrampsXmlWriter(UpdateCallback):
for key in group_map:
value = self.db.get_name_group_mapping(key)
self.g.write(' <map type="group_as" key="%s" value="%s"/>\n'
% (self.fix(key), value))
% (self.fix(key), self.fix(value)))
self.g.write(" </namemaps>\n")
def write_bookmarks(self):
+7 -1
View File
@@ -32,6 +32,7 @@ from gi.repository import Gtk
from gramps.gui.editors import EditEvent
from gramps.gui.listmodel import ListModel, NOSORT
from gramps.gen.plug import Gramplet
from gramps.gen.lib import (EventType, Date)
from gramps.gen.plug.report.utils import find_spouse
from gramps.gui.dbguielement import DbGUIElement
from gramps.gen.display.place import displayer as place_displayer
@@ -129,7 +130,12 @@ class Events(Gramplet, DbGUIElement):
date = event.get_date_object()
start_date = self.cached_start_date
if date and start_date:
return (date - start_date).format(precision=age_precision)
if (date == start_date and date.modifier == Date.MOD_NONE
and not (event.get_type().is_death_fallback() or
event.get_type() == EventType.DEATH)):
return ""
else:
return (date - start_date).format(precision=age_precision)
else:
return ""
+2
View File
@@ -300,6 +300,8 @@ class DateRange:
"""
start = None
stop = None
if date.is_empty():
return (None, None)
if date.modifier == Date.MOD_NONE:
start = date.sortval
stop = date.sortval
+3 -1
View File
@@ -258,7 +258,8 @@ class ProgenOptions(ManagedWindow):
# display window if GUI active
if self.uistate:
ManagedWindow.__init__(self, self.uistate, [], self.__class__)
ManagedWindow.__init__(self, self.uistate, [], self.__class__,
modal=True)
self._display()
def __on_source_button_toggled(self, widget):
@@ -580,6 +581,7 @@ class ProgenOptions(ManagedWindow):
widget.grab_focus()
# creates a modal window and display immediatly!
self.show()
self.glade.toplevel.run()
def _collect(self):
+3 -1
View File
@@ -3222,6 +3222,7 @@ class GedcomParser(UpdateCallback):
make_unknown(gramps_id, self.explanation.handle,
class_func, commit_func, self.trans,
db=self.dbase)
self.missing_references += 1
self.__add_msg(_("Error: %(msg)s '%(gramps_id)s'"
" (input as @%(xref)s@) not in input"
" GEDCOM. Record synthesised") %
@@ -7775,7 +7776,8 @@ class GedcomParser(UpdateCallback):
# have got deleted by Chack and repair because the record is empty.
# If we find the source record, the title is overwritten in
# __source_title.
src.set_title(line.data)
if not src.title:
src.set_title(line.data)
self.dbase.commit_source(src, self.trans)
self.__parse_source_reference(citation, level, src.handle, state)
citation.set_reference_handle(src.handle)
+1 -1
View File
@@ -290,7 +290,7 @@ class BasePersonView(ListView):
<property name="icon-name">go-home</property>
<property name="action-name">win.HomePerson</property>
<property name="tooltip_text" translatable="yes">'''
'''Go to the default person</property>
'''Go to the home person</property>
<property name="label" translatable="yes">_Home</property>
<property name="use-underline">True</property>
</object>
+6 -4
View File
@@ -729,7 +729,8 @@ class ProgenParser(UpdateCallback):
# provide feedback about import progress (GUI / TXT)
if self.uistate:
self.progress = ProgressMeter(_("Import from Pro-Gen"), '')
self.progress = ProgressMeter(_("Import from Pro-Gen"), '',
parent=self.uistate.window)
else:
UpdateCallback.__init__(self, user.callback)
@@ -1331,9 +1332,10 @@ class ProgenParser(UpdateCallback):
if attr:
person.add_attribute(attr)
else:
self.__add_name(person, citation.handle, NameType.AKA,
' '.join(alias_text[0:-1]),
'', alias_text[-1].split(), '')
self.__add_name(
person, citation.handle if citation else None,
NameType.AKA, ' '.join(alias_text[0:-1]),
'', alias_text[-1], '')
# process F09 Person Code
refn_code = recflds[person_ix[9]] # F09: INDI REFN/INDI CODE
+1 -1
View File
@@ -113,7 +113,7 @@ class MessageLayer(GObject.GObject, osmgpsmap.MapLayer):
"""
Add a message
"""
self.message += "\n%s" % message if self.message is not "" else message
self.message += "\n%s" % message if self.message else message
def do_draw(self, gpsmap, ctx):
"""
+14 -1
View File
@@ -64,6 +64,7 @@ _ = glocale.translation.sgettext
from gramps.gen.config import config
from gramps.gui.dialog import ErrorDialog
from gramps.gen.constfunc import get_env_var
from gramps.gen.const import VERSION_DIR
#-------------------------------------------------------------------------
#
@@ -138,7 +139,19 @@ class OsmGps:
ErrorDialog(_("Can't create "
"tiles cache directory %s") % cache_path,
parent=self.uistate.window)
return self.vbox
gini = os.path.join(VERSION_DIR, 'gramps.ini')
ErrorDialog(_("You must verify and change the tiles cache"
"\n..."
"\n[geography]"
"\n..."
"\npath='bad/path'"
"\n..."
"\nin the gramps.ini file :\n%s"
"\n\nBefore to change the gramps.ini file, "
"you need to close gramps"
"\n\nThe next errors will be normal") % gini,
parent=self.uistate.window)
return None
self.change_map(None, config.get("geography.map_service"))
return self.vbox
+2 -2
View File
@@ -145,8 +145,8 @@ class ToolControl(unittest.TestCase):
"1 invalid birth event name was fixed",
"1 invalid death event name was fixed",
"2 places were referenced, but not found",
"15 citations were referenced, but not found",
"18 sources were referenced, but not found",
"14 citations were referenced, but not found",
"17 sources were referenced, but not found",
"9 Duplicated Gramps IDs fixed",
"7 empty objects removed",
"1 person objects",
@@ -271,6 +271,7 @@ class BirthdayReport(Report):
for person_handle in people:
step()
person = self.database.get_person_from_handle(person_handle)
short_name = self.get_name(person)
birth_ref = person.get_birth_ref()
birth_date = None
if birth_ref:
+2 -1
View File
@@ -441,7 +441,8 @@ class TagReport(Report):
for place_handle in place_list:
place = self.database.get_place_from_handle(place_handle)
place_title = _pd.display(self.database, place, self.place_format)
place_title = _pd.display(self.database, place, None,
self.place_format)
self.doc.start_row()
+5 -1
View File
@@ -172,7 +172,11 @@ class RemoveUnused(tool.Tool, ManagedWindow, UpdateCallback):
GObject.TYPE_STRING,
GObject.TYPE_STRING,
GObject.TYPE_STRING)
self.sort_model = self.real_model.sort_new_with_model()
# a short term Gtk introspection means we need to try both ways:
if hasattr(self.real_model, "sort_new_with_model"):
self.sort_model = self.real_model.sort_new_with_model()
else:
self.sort_model = Gtk.TreeModelSort.new_with_model(self.real_model)
self.warn_tree.set_model(self.sort_model)
self.renderer = Gtk.CellRendererText()
+13 -9
View File
@@ -542,7 +542,10 @@ class VerifyResults(ManagedWindow):
GObject.TYPE_BOOLEAN)
self.filt_model = self.real_model.filter_new()
self.filt_model.set_visible_column(VerifyResults.TRUE_COL)
self.sort_model = self.filt_model.sort_new_with_model()
if hasattr(self.filt_model, "sort_new_with_model"):
self.sort_model = self.filt_model.sort_new_with_model()
else:
self.sort_model = Gtk.TreeModelSort.new_with_model(self.filt_model)
self.warn_tree.set_model(self.sort_model)
self.renderer = Gtk.CellRendererText()
@@ -659,18 +662,19 @@ class VerifyResults(ManagedWindow):
self.closeall()
def hide_toggled(self, button):
self.filt_model = self.real_model.filter_new()
if button.get_active():
button.set_label(_("_Show all"))
self.filt_model = self.real_model.filter_new()
self.filt_model.set_visible_column(VerifyResults.SHOW_COL)
self.sort_model = self.filt_model.sort_new_with_model()
self.warn_tree.set_model(self.sort_model)
else:
self.filt_model = self.real_model.filter_new()
self.filt_model.set_visible_column(VerifyResults.TRUE_COL)
self.sort_model = self.filt_model.sort_new_with_model()
self.warn_tree.set_model(self.sort_model)
button.set_label(_("_Hide marked"))
self.filt_model.set_visible_column(VerifyResults.TRUE_COL)
if hasattr(self.filt_model, "sort_new_with_model"):
self.sort_model = self.filt_model.sort_new_with_model()
else:
self.sort_model = Gtk.TreeModelSort.new_with_model(
self.filt_model)
self.warn_tree.set_model(self.sort_model)
def selection_toggled(self, cell, path_string):
sort_path = tuple(map(int, path_string.split(':')))
@@ -1788,7 +1792,7 @@ class OldAgeButNoDeath(PersonRule):
class BirthEqualsDeath(PersonRule):
""" test if a person's birth date is the same as their death date """
ID = 33
SEVERITY = Rule.ERROR
SEVERITY = Rule.WARNING
def broken(self):
""" return boolean indicating whether this rule is violated """
birth_date = get_birth_date(self.db, self.obj)
+1 -1
View File
@@ -214,7 +214,7 @@ class FanChartView(fanchart.FanChartGrampsGUI, NavigationView):
<property name="icon-name">go-home</property>
<property name="action-name">win.HomePerson</property>
<property name="tooltip_text" translatable="yes">'''
'''Go to the default person</property>
'''Go to the home person</property>
<property name="label" translatable="yes">_Home</property>
<property name="use-underline">True</property>
</object>
+1 -1
View File
@@ -141,7 +141,7 @@ _UI_DEF = [
<property name="icon-name">go-home</property>
<property name="action-name">win.HomePerson</property>
<property name="tooltip_text" translatable="yes">'''
'''Go to the default person</property>
'''Go to the home person</property>
<property name="label" translatable="yes">_Home</property>
<property name="use-underline">True</property>
</object>
+1 -1
View File
@@ -139,7 +139,7 @@ _UI_DEF = [
<property name="icon-name">go-home</property>
<property name="action-name">win.HomePerson</property>
<property name="tooltip_text" translatable="yes">'''
'''Go to the default person</property>
'''Go to the home person</property>
<property name="label" translatable="yes">_Home</property>
<property name="use-underline">True</property>
</object>
+1 -1
View File
@@ -138,7 +138,7 @@ _UI_DEF = [
<property name="icon-name">go-home</property>
<property name="action-name">win.HomePerson</property>
<property name="tooltip_text" translatable="yes">'''
'''Go to the default person</property>
'''Go to the home person</property>
<property name="label" translatable="yes">_Home</property>
<property name="use-underline">True</property>
</object>
+1 -1
View File
@@ -139,7 +139,7 @@ _UI_DEF = [
<property name="icon-name">go-home</property>
<property name="action-name">win.HomePerson</property>
<property name="tooltip_text" translatable="yes">'''
'''Go to the default person</property>
'''Go to the home person</property>
<property name="label" translatable="yes">_Home</property>
<property name="use-underline">True</property>
</object>
+1 -1
View File
@@ -723,7 +723,7 @@ class PedigreeView(NavigationView):
<property name="icon-name">go-home</property>
<property name="action-name">win.HomePerson</property>
<property name="tooltip_text" translatable="yes">'''
'''Go to the default person</property>
'''Go to the home person</property>
<property name="label" translatable="yes">_Home</property>
<property name="use-underline">True</property>
</object>
+1 -1
View File
@@ -466,7 +466,7 @@ class RelationshipView(NavigationView):
<property name="icon-name">go-home</property>
<property name="action-name">win.HomePerson</property>
<property name="tooltip_text" translatable="yes">'''
'''Go to the default person</property>
'''Go to the home person</property>
<property name="label" translatable="yes">_Home</property>
<property name="use-underline">True</property>
</object>
+7 -56
View File
@@ -1840,7 +1840,7 @@ class BasePage: # pylint: disable=C1001
_linkurl = self.report.build_url_fname_html(_obj.handle,
"ppl",
linkurl)
elif classname == "Family":
elif classname == "Family" and self.inc_families:
_obj = self.r_db.get_family_from_handle(newhandle)
partner1_handle = _obj.get_father_handle()
partner2_handle = _obj.get_mother_handle()
@@ -1866,7 +1866,7 @@ class BasePage: # pylint: disable=C1001
"ppl", True)
if not _name:
_name = self._("Unknown")
elif classname == "Event":
elif classname == "Event" and self.inc_events:
_obj = self.r_db.get_event_from_handle(newhandle)
_name = _obj.get_description()
if not _name:
@@ -1952,57 +1952,16 @@ class BasePage: # pylint: disable=C1001
# make a thumbnail of this region
newpath = self.copy_thumbnail(photo_handle, photo, region)
newpath = self.report.build_url_fname(newpath, uplink=True)
snapshot += self.media_link(photo_handle, newpath, descr,
uplink=self.uplink,
usedescr=False)
else:
dummy_rpath, newpath = self.report.prepare_copy_media(photo)
newpath = self.report.build_url_fname(newpath, uplink=True)
# FIXME: There doesn't seem to be any point in highlighting
# a sub-region in the thumbnail and linking back to the
# person or whatever. First it is confusing when the link
# probably has nothing to do with the page on which the
# thumbnail is displayed, and second on a thumbnail it is
# probably too small to see, and third, on the thumbnail,
# the link is shown above the image (which is pretty
# useless!)
_region_items = self.media_ref_rect_regions(photo_handle,
linkurl=False)
if _region_items:
with Html("div", id="GalleryDisplay") as mediadisplay:
snapshot += mediadisplay
ordered = Html("ol", class_="RegionBox")
mediadisplay += ordered
while _region_items:
(name, coord_x, coord_y,
width, height, linkurl) = _region_items.pop()
ordered += Html("li",
style="left:%d%%; top:%d%%; "
"width:%d%%; height:%d%%;" % (
coord_x, coord_y,
width, height))
ordered += Html("a", name, href=linkurl)
# Need to add link to mediadisplay to get the links:
mediadisplay += self.media_link(photo_handle,
newpath, descr,
self.uplink, False)
else:
try:
# Begin hyperlink. Description is given only for
# the purpose of the alt tag in img element
snapshot += self.media_link(photo_handle, newpath,
descr,
uplink=self.uplink,
usedescr=False)
except (IOError, OSError) as msg:
self.r_user.warn(_("Could not add photo to page"),
str(msg))
snapshot += self.media_link(photo_handle, newpath,
descr,
uplink=self.uplink,
usedescr=False)
else:
# begin hyperlink
snapshot += self.doc_link(photo_handle, descr,
@@ -2030,12 +1989,6 @@ class BasePage: # pylint: disable=C1001
if photoref.ref in photolist_handles:
photo = photolist_handles[photoref.ref]
photolist_ordered.append(photo)
try:
if photo in photolist:
photolist.remove(photo)
except ValueError:
LOG.warning("Error trying to remove '%s' from photolist",
photo)
# and add any that are left (should there be any?)
photolist_ordered += photolist
@@ -2440,9 +2393,6 @@ class BasePage: # pylint: disable=C1001
# not necessarily mean that a page has been generated
(link, name, gid) = result
if name_style == _NAME_STYLE_FIRST and person:
name = _get_short_name(person.get_gender(),
person.get_primary_name())
name = html_escape(name)
# construct the result
if not self.noid and gid != "":
@@ -2593,6 +2543,7 @@ class BasePage: # pylint: disable=C1001
(self._("State/ Province"),
mlocation.get(PlaceType.STATE, '')),
(self._("Postal Code"), place.get_code()),
(self._("Province"), mlocation.get(PlaceType.PROVINCE, '')),
(self._("Country"), mlocation.get(PlaceType.COUNTRY, ''))]:
if data:
trow = Html("tr") + (
+4 -3
View File
@@ -126,10 +126,11 @@ class ContactPage(BasePage):
note_id = report.options['contactnote']
if note_id:
note = self.r_db.get_note_from_gramps_id(note_id)
note_text = self.get_note_format(note, False)
if note:
note_text = self.get_note_format(note, False)
# attach note
summaryarea += note_text
# attach note
summaryarea += note_text
# add clearline for proper styling
# add footer section
+7 -5
View File
@@ -87,15 +87,17 @@ class HomePage(BasePage):
section += homeimg
note_id = report.options['homenote']
ldatec = None
if note_id:
note = self.r_db.get_note_from_gramps_id(note_id)
note_text = self.get_note_format(note, False)
if note:
note_text = self.get_note_format(note, False)
# attach note
section += note_text
# attach note
section += note_text
# last modification of this note
ldatec = note.get_change_time()
# last modification of this note
ldatec = note.get_change_time()
# create clear line for proper styling
# create footer section
+7 -5
View File
@@ -87,15 +87,17 @@ class IntroductionPage(BasePage):
section += introimg
note_id = report.options['intronote']
ldatec = None
if note_id:
note = self.r_db.get_note_from_gramps_id(note_id)
note_text = self.get_note_format(note, False)
if note:
note_text = self.get_note_format(note, False)
# attach note
section += note_text
# attach note
section += note_text
# last modification of this note
ldatec = note.get_change_time()
# last modification of this note
ldatec = note.get_change_time()
# add clearline for proper styling
# create footer section
+3 -3
View File
@@ -1453,7 +1453,7 @@ class NavWebReport(Report):
output_file.close()
else:
output_file.close()
if date > 0:
if date is not None and date > 0:
os.utime(output_file.name, (date, date))
def prepare_copy_media(self, photo):
@@ -1687,7 +1687,7 @@ class NavWebOptions(MenuReportOptions):
cright.set_help(_("The copyright to be used for the web files"))
addopt("cright", cright)
self.__css = EnumeratedListOption(('StyleSheet'), CSS["default"]["id"])
self.__css = EnumeratedListOption(_('StyleSheet'), CSS["default"]["id"])
for (dummy_fname, gid) in sorted(
[(CSS[key]["translation"], CSS[key]["id"])
for key in list(CSS.keys())]):
@@ -1891,7 +1891,7 @@ class NavWebOptions(MenuReportOptions):
_("Max width of initial image"), _DEFAULT_MAX_IMG_WIDTH, 0, 2000)
self.__maxinitialimagewidth.set_help(
_("This allows you to set the maximum width "
"of the image shown on the media page. Set to 0 for no limit."))
"of the image shown on the media page."))
addopt("maxinitialimagewidth", self.__maxinitialimagewidth)
self.__maxinitialimageheight = NumberOption(

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