Compare commits

...

184 Commits

Author SHA1 Message Date
Stéphane Charette 1af6e6cf63 updated debian package files
svn: r14731
2010-03-10 09:19:50 +00:00
Stéphane Charette c54a3cc0d4 update version string and copyright year in "about" dialog window
svn: r14728
2010-03-10 07:42:56 +00:00
Erik De Richter dff7c4a8b5 update nl translation
svn: r14727
2010-03-10 07:13:01 +00:00
Nick Hall d4d71670e8 3687: Prevent multiple re-build of views when name format changed
svn: r14724
2010-03-09 22:39:22 +00:00
Benny Malengier 1b4f86ad2d make notrelated ok in glade designer
svn: r14722
2010-03-09 20:59:46 +00:00
Boril Gourinov 47f4566a9c Update of Bulgarian translation, 99.46% ready
svn: r14721
2010-03-09 20:57:04 +00:00
Benny Malengier 1c58e1c7b2 add help button to changenames as it is assumed in the code
svn: r14719
2010-03-09 20:53:09 +00:00
Espen Berg 12714fd6f1 Updated Norwegian bokmål translation
svn: r14718
2010-03-09 19:09:03 +00:00
Nick Hall 57e2ee81d4 Add navigation menu items to place tree view
svn: r14716
2010-03-09 17:40:50 +00:00
Jérôme Rapinat 6ca4f6b84f 2 new strings, update chinese and french translations
svn: r14715
2010-03-09 17:11:56 +00:00
Mirko Leonhäuser 9150d59c1b Updated german translation
svn: r14713
2010-03-09 13:53:53 +00:00
Peter Landgren 3696ea6dd4 Last? update for 3.2.
svn: r14712
2010-03-09 12:54:20 +00:00
Peter Landgren a8da4bf460 Add message if addon has wrong version.
svn: r14711
2010-03-09 12:51:18 +00:00
Joan Creus 4c28226a3f Translation update
svn: r14706
2010-03-09 01:40:29 +00:00
Doug Blank d6d386520c Used module desc rather than plugin desc
svn: r14705
2010-03-09 01:23:08 +00:00
Boril Gourinov d162eca43d Update of Bulgarian translation, 99% ready
svn: r14703
2010-03-08 21:46:51 +00:00
Arturas Sleinius f9e3d068d3 Updated Lithuanian translation
svn: r14702
2010-03-08 20:12:09 +00:00
Josip Pisoj 397809cd7b bug #3662: SoundEx works only for ascii characters
svn: r14701
2010-03-08 18:13:43 +00:00
Mirko Leonhäuser 728c6f3c3b Updated german translation
svn: r14699
2010-03-08 17:53:30 +00:00
Mirko Leonhäuser 99160920f1 Updated german translation
svn: r14698
2010-03-08 13:09:02 +00:00
Peter Landgren 4bd50c6749 Swedish update after fixed typo in gramplet.gpr.py.
svn: r14695
2010-03-08 12:07:02 +00:00
Peter Landgren c7ec7125f7 Fixed a typo.
svn: r14694
2010-03-08 12:05:10 +00:00
Peter Landgren e5c53f3734 Swedish update
svn: r14693
2010-03-08 11:51:28 +00:00
Rob G. Healey 6e64cd02bc Alphabetized the authors file. If you see an error, then I apologize and will fix it if you don't.
svn: r14692
2010-03-08 07:24:17 +00:00
Espen Berg 4dad6d00db Updated Norwegian bokmål translation
svn: r14691
2010-03-08 07:22:09 +00:00
Doug Blank 438793abf5 3673: People with less than 1 year seems to be ignored on 'Age on Date' gramplet and 'Records' report
svn: r14688
2010-03-08 02:58:52 +00:00
Luigi Toscano a8506d868a Translation updates.
svn: r14687
2010-03-07 21:49:04 +00:00
Doug Blank ed7f937da2 Removed Django import/export and CalcEstimateDates (moved to addons)
svn: r14686
2010-03-07 21:48:29 +00:00
Arturas Sleinius 3f8586fed9 Updated Lithuanian translation
svn: r14683
2010-03-07 21:20:06 +00:00
Mirko Leonhäuser c6c6307318 updated german translation
svn: r14682
2010-03-07 21:04:37 +00:00
Doug Blank 0d7398c09b Speed-up for right-click menu
svn: r14680
2010-03-07 20:56:56 +00:00
Nick Hall 949c1494e0 Bug fix for multiple sort keys
svn: r14678
2010-03-07 19:48:30 +00:00
Benny Malengier cb7227f692 3175: Crash when undoing a family edit- part of undo being slow
svn: r14676
2010-03-07 19:38:48 +00:00
Erik De Richter 9da1431b6c update nl translation
svn: r14675
2010-03-07 19:36:36 +00:00
Nick Hall bf0a1cc434 Allow multiple sort keys on tree views
svn: r14674
2010-03-07 17:49:30 +00:00
Nick Hall 137bc788c5 Fix sort order in flat person view
svn: r14671
2010-03-07 17:26:27 +00:00
Jérôme Rapinat c88c876e38 new template, strings were added, not modified
svn: r14670
2010-03-07 17:19:24 +00:00
Joan Creus 41c786cc18 Translation update
svn: r14668
2010-03-07 16:49:39 +00:00
Benny Malengier 6aeba201a4 3657: Calculation od step siblings is incorrect in narrated Web report
svn: r14666
2010-03-07 16:08:53 +00:00
Doug Blank 56c898064d Added FAQs with links from user list and wiki
svn: r14665
2010-03-07 16:08:12 +00:00
Benny Malengier e0b0b14c2d 3667: Addings a new person and changing the name grouping results in frozen window
svn: r14663
2010-03-07 15:34:32 +00:00
Doug Blank 129d6e6fbd Added comments for gramplets
svn: r14660
2010-03-07 14:54:55 +00:00
Benny Malengier f658139fb4 3672: Crosshair image missing from GeoView
svn: r14657
2010-03-07 09:10:00 +00:00
Joan Creus bf00316be0 Updating translation
svn: r14655
2010-03-06 23:30:00 +00:00
Nick Hall 8bb52bb0d9 Add my name to authors file
svn: r14651
2010-03-06 16:09:15 +00:00
Doug Blank 6a7594b95f 3665: Crash with Webcal report when linking with WebReport
svn: r14649
2010-03-06 13:31:09 +00:00
Peter Landgren 2f52deae58 One file was listed twice.
svn: r14647
2010-03-06 10:54:37 +00:00
Benny Malengier 677ad44e44 make fanchart a stable plugin
svn: r14644
2010-03-06 10:10:45 +00:00
Luigi Toscano ae58e5a8d4 Translation updates.
svn: r14643
2010-03-05 23:30:16 +00:00
Benny Malengier 23d80230a9 3441: Need to connect on_result_delete_event on glade dialogs - part 2
svn: r14642
2010-03-05 22:52:24 +00:00
Benny Malengier 3511390a52 3441: Need to connect on_result_delete_event on glade dialogs
svn: r14639
2010-03-05 22:34:50 +00:00
Espen Berg 842432b71d Norwegian bokmål is fully translated. I could not wait to complete when I had so few phrases left from last commit
svn: r14638
2010-03-05 22:16:28 +00:00
Espen Berg 25ac9a4f20 Enough translation for tonight. 12 fuzzy and 7 untranslated strings remaining
svn: r14636
2010-03-05 20:13:25 +00:00
Jérôme Rapinat 011ff47007 geoview icon for zoom missing
svn: r14634
2010-03-05 18:57:53 +00:00
Jérôme Rapinat 10028218eb typo, only copy geo-place-add.svg
svn: r14632
2010-03-05 17:49:35 +00:00
Jérôme Rapinat 235180132c PNG images for Gnome UI (SVG missing)
svn: r14630
2010-03-05 17:42:31 +00:00
Benny Malengier 4ff82a7581 3271: Verify tool glade file needs to have elements renamed
svn: r14628
2010-03-05 15:43:47 +00:00
Benny Malengier 01f264fa8b 2043: Error on cosole output when Esc press in configure window of custom text in the book report
svn: r14627
2010-03-05 15:24:47 +00:00
Espen Berg 571c6305ea Some more done on Norwegian translation
svn: r14625
2010-03-05 12:01:56 +00:00
Peter Landgren 9ad6dbef8f Found extra dot after abbreviation for birth and death.
svn: r14624
2010-03-05 11:01:34 +00:00
Stéphane Charette 17b0fa4fc9 update version string now that 3.2.0-0beta1 has been released
svn: r14623
2010-03-05 09:06:44 +00:00
Benny Malengier 8b4b8da242 remove pedigreeviewext completely
svn: r14621
2010-03-05 07:59:22 +00:00
Espen Berg 046d0fc897 Some more revision on Norwegian translation
svn: r14620
2010-03-04 22:05:55 +00:00
Jérôme Rapinat 1c58f0f0ba minors improvements
svn: r14618
2010-03-04 14:32:08 +00:00
Peter Landgren 7b40ee1aea Fixed another three errors in string formatting using {}.
svn: r14617
2010-03-04 14:11:59 +00:00
Peter Landgren b1c33334d2 Fixed another two errors in string formatting using {}.
svn: r14615
2010-03-04 13:58:08 +00:00
Peter Landgren b84716e1e9 Fixed another error in string formatting using {}.
svn: r14613
2010-03-04 13:49:57 +00:00
Peter Landgren c134937e9d Fixed another error in string formatting using {}.
svn: r14610
2010-03-04 13:38:30 +00:00
Jérôme Rapinat 5647b44801 3659: unable to load MediaManager
svn: r14608
2010-03-04 13:25:30 +00:00
Jérôme Rapinat 7e01ef0f6b 3659: unable to load MediaManager
svn: r14606
2010-03-04 11:26:28 +00:00
Jérôme Rapinat 11437b7c27 3661: Typo on all_events.py quickview
svn: r14604
2010-03-04 11:15:28 +00:00
Espen Berg 23bad21b29 Some more revision on Norwegian translation
svn: r14603
2010-03-04 08:20:08 +00:00
Doug Blank 8546dc91e5 Added some protection on loading bad views
svn: r14602
2010-03-04 01:11:48 +00:00
Josip Pisoj cd0d479ec1 hr translations update
svn: r14600
2010-03-04 00:45:30 +00:00
Nick Hall 6fe4cff9e2 Remove extended pedigree view
svn: r14599
2010-03-03 23:21:12 +00:00
Jérôme Rapinat 5a76e262c6 typo
svn: r14595
2010-03-03 08:51:55 +00:00
Jérôme Rapinat acb3371b72 3654: Cannot print title on all_relations quick view
svn: r14593
2010-03-03 08:43:17 +00:00
Boril Gourinov adfc952c02 Update of Bulgarian translation, fixed some bugs
svn: r14590
2010-03-02 23:10:38 +00:00
Gary Burton 82b1c17360 Do not explicitly set an item width as it causes excessive whitespace around thumbnails when the image description becomes longer.
svn: r14588
2010-03-02 21:56:35 +00:00
Espen Berg 16d631bbb3 Some more revision on Norwegian translation
svn: r14587
2010-03-02 21:31:29 +00:00
Mirko Leonhäuser 3e4b3f69a9 Updated _Date_de.py
svn: r14584
2010-03-02 20:26:46 +00:00
Mirko Leonhäuser f9415e8fd1 updated german translation
svn: r14583
2010-03-02 20:26:10 +00:00
Erik De Richter f6d9997204 update nl translation
svn: r14582
2010-03-02 17:11:30 +00:00
Nick Hall f21fb8d6d8 Update history and MRU lists when objects are deleted
svn: r14580
2010-03-02 15:48:05 +00:00
Peter Landgren 9efe53787d Swedish update
svn: r14579
2010-03-02 12:40:54 +00:00
Serge Noiraud 5c11bc6f09 GeoView : bug 3517 : filter in menu
svn: r14578
2010-03-02 11:56:38 +00:00
Benny Malengier 027b333860 03650: Cannot execute changes proposed by Calculate Estimated Date
svn: r14576
2010-03-02 11:19:59 +00:00
Benny Malengier 0a2d52a5a0 03651: Deleting more than one person causes crash
Actually these are fixes trying to fix this bug


svn: r14574
2010-03-02 11:13:19 +00:00
Jérôme Rapinat 3dcc74a173 merge and check some translations
svn: r14573
2010-03-02 11:07:18 +00:00
Jérôme Rapinat fe337c21cd check some translations
svn: r14572
2010-03-02 10:53:19 +00:00
Erik De Richter b2d58a27e4 update nl translation
svn: r14571
2010-03-02 10:33:01 +00:00
Jérôme Rapinat c9cef9e4da check some translations, wrong permission
svn: r14570
2010-03-02 10:31:20 +00:00
Jérôme Rapinat 7fdf47ac3c new template, merge and check some translations
svn: r14569
2010-03-02 10:13:21 +00:00
Espen Berg 1e70d474f6 Some more Norwegian translation
svn: r14568
2010-03-02 09:48:49 +00:00
Peter Landgren 2169c8ab4f Fix of issue 3653 (Windows only issue).
svn: r14566
2010-03-02 09:13:34 +00:00
Benny Malengier 17f7e5f6fd include fanchart in distribution
svn: r14564
2010-03-02 08:12:31 +00:00
Espen Berg afd9b2f40f Some revision on Norwegian translation. Got rid of all nasty mismatches. Now only normal fuzzys and untranslated strings remaining
svn: r14563
2010-03-02 07:48:50 +00:00
Rob G. Healey 33b209eed7 Fixed two typos in stylesheet.
svn: r14560
2010-03-02 01:33:53 +00:00
Serge Noiraud 90dc718dd0 GeoView : bad word not translatable.
svn: r14558
2010-03-01 22:02:26 +00:00
Mirko Leonhäuser c79c29ec9a Updated _Date_de.py translated months
svn: r14556
2010-03-01 21:37:49 +00:00
Mirko Leonhäuser 605f9d0f24 updated german translation
svn: r14555
2010-03-01 21:34:33 +00:00
Nick Hall 01c80b19db 3603: Make family option in reports default to the active family
svn: r14553
2010-03-01 19:17:59 +00:00
Peter Landgren 049698426e Fix of isue 3645.
svn: r14552
2010-03-01 18:13:48 +00:00
Nick Hall cba3502131 3646: Remove redundant code
svn: r14549
2010-03-01 17:45:07 +00:00
Jérôme Rapinat dfa9118384 3596: Web reports dialogs use too large length value (Download section)
svn: r14548
2010-03-01 17:20:49 +00:00
Jérôme Rapinat 2e84a2457b 3596: Web reports dialogs use too large length value
svn: r14547
2010-03-01 15:55:30 +00:00
Benny Malengier ee8559dd69 3542: Scratchpad does not remove objects when changing database
svn: r14545
2010-03-01 12:52:33 +00:00
Peter Landgren e984e15c9d Minor update of Swedish translation.
svn: r14544
2010-03-01 10:48:28 +00:00
Erik De Richter 393a2d9748 update nl translation
svn: r14543
2010-03-01 10:29:00 +00:00
Benny Malengier 96fbb98733 Fix bug: allow drop from Nautilius/Dolphin
svn: r14541
2010-03-01 08:57:37 +00:00
Benny Malengier 9b30450f33 Fix bug: allow drop from Nautilius/Dolphin
svn: r14539
2010-03-01 08:51:17 +00:00
Boril Gourinov 92b0b99e25 Update of Bulgarian translation
svn: r14537
2010-02-28 21:59:37 +00:00
Josip Pisoj 755807436a Updated Croatian translations
svn: r14536
2010-02-28 21:39:45 +00:00
Peter Landgren 155aea5d72 Further improvments to drag and drop mult files in Windows.
svn: r14534
2010-02-28 21:24:34 +00:00
Gary Burton 3c80aaa2b0 Fix for 0003629: Cannot set entry on marker field into NotRelated tool
svn: r14532
2010-02-28 21:12:47 +00:00
Mirko Leonhäuser e91cdcbd8b updated german translation
svn: r14531
2010-02-28 21:12:23 +00:00
Arturas Sleinius 38a90e201f Updated Lithuanian translation
svn: r14530
2010-02-28 20:12:32 +00:00
Gary Burton 61bff1a65c Align vertical position of person label and edit button
svn: r14528
2010-02-28 19:58:43 +00:00
Nick Hall 91281166c1 Only update display counts for nodes with handles
svn: r14526
2010-02-28 17:24:10 +00:00
Nick Hall 17e9750bb5 3448: Prevent removal of hidden root node
svn: r14524
2010-02-28 17:01:11 +00:00
Gary Burton 33414b0c78 Improve GEDCOM round trip by parsing SOUR and NOTE tokens for FACT attributes. Gramps was previously exporting this data but ignoring it on import.
svn: r14522
2010-02-28 16:17:54 +00:00
Jérôme Rapinat ec43a7122c generate template with last POTFILES.in
svn: r14521
2010-02-28 15:38:55 +00:00
Jérôme Rapinat 76c1044a64 new messages, typo and update translation template
svn: r14519
2010-02-28 15:24:50 +00:00
Benny Malengier d91cbd91bf 3631: Cannot start Gramps without any view loaded (OK, it is stupid...)
svn: r14517
2010-02-28 14:27:17 +00:00
Benny Malengier 644d0ac540 Fix drag/drop bug: allow multiple drop on gallery
svn: r14516
2010-02-28 14:03:52 +00:00
Gary Burton 99c8ae9181 Fix GEDCOM import of CHAN for SOUR, REPO, OBJE. Bug 3373.
svn: r14514
2010-02-28 13:11:52 +00:00
Arturas Sleinius 57f66d842f Updated Lithuanian translation
svn: r14512
2010-02-27 23:07:38 +00:00
Arturas Sleinius 83c19420b4 Updated Lithuanian translation
svn: r14511
2010-02-27 18:21:39 +00:00
Peter Landgren d1c4c853bb Fixed a typo 'juct' -> 'just'.
svn: r14510
2010-02-27 14:24:12 +00:00
Peter Landgren 6f90f1cb46 Some finetuning of translation.
svn: r14507
2010-02-27 13:44:16 +00:00
Peter Landgren b69ee2b401 Fix of issue 3642.
svn: r14505
2010-02-27 13:27:33 +00:00
Doug Blank ab0021c02b 3639: Check and Repair tool fails with unsupported operand
svn: r14504
2010-02-27 12:14:25 +00:00
Jérôme Rapinat f4fb59aefe typo
svn: r14501
2010-02-27 09:29:03 +00:00
Josip Pisoj f660795ce1 Updated Croatian translations
svn: r14500
2010-02-26 23:04:02 +00:00
Peter Landgren fe1d2530b1 Had missed to add constfunct.py.
svn: r14499
2010-02-26 10:33:25 +00:00
Peter Landgren 81ad0c8602 Swedish update.
svn: r14498
2010-02-26 10:27:11 +00:00
Erik De Richter fbc6543ea7 update nl translation
svn: r14497
2010-02-26 10:23:45 +00:00
Peter Landgren c639654f9b Fixed a typo.
svn: r14496
2010-02-26 07:14:36 +00:00
Doug Blank ac8bc209e1 3639: Check and Repair tool fails with unsupported operand
svn: r14494
2010-02-26 01:56:09 +00:00
Mirko Leonhäuser 2e9066a6cf Update german translation
svn: r14489
2010-02-25 21:47:56 +00:00
Jérôme Rapinat d99f6eac3f typo
svn: r14487
2010-02-25 17:17:22 +00:00
Rob G. Healey 9dbf20d795 Fixed error on line 691. Thanks Peter.
svn: r14485
2010-02-25 16:51:55 +00:00
Peter Landgren c0cc2ff7ba Swedish update.
svn: r14481
2010-02-25 15:15:09 +00:00
Benny Malengier 66639dd2cb translate category in menu and title
svn: r14480
2010-02-25 13:01:48 +00:00
Doug Blank 38290f7c57 Fixed gettext formulation error
svn: r14478
2010-02-25 11:29:26 +00:00
Jérôme Rapinat 43dc1d299b update french translation
svn: r14477
2010-02-25 09:02:02 +00:00
Rob G. Healey 9710e7adcf Fixed the problem with ngettext on line 1462.
svn: r14476
2010-02-25 04:47:52 +00:00
Rob G. Healey d719751914 Fixed a ngettext issue on line 1462 from earlier today.
svn: r14475
2010-02-25 04:34:14 +00:00
Rob G. Healey 96c80a44e2 Fixed error blocking start of software.
svn: r14474
2010-02-25 04:16:10 +00:00
Doug Blank 9dfa170293 3628: Frames not set on CalcToolManagedWindow class
svn: r14473
2010-02-25 01:21:37 +00:00
Mirko Leonhäuser f3b7e35c69 Update german translation
svn: r14471
2010-02-24 23:59:48 +00:00
Rob G. Healey 4c9197b403 Adding named variables to format strings for errors in 'make distcheck' to work.
svn: r14470
2010-02-24 23:11:28 +00:00
Rob G. Healey 3ed392bab0 Adding named variables to format strings for errors in 'make distcheck' to work.
svn: r14469
2010-02-24 23:09:32 +00:00
Rob G. Healey edd6fc6ee7 Adding named variables to format strings for errors in 'make distcheck' to work.
svn: r14468
2010-02-24 23:08:16 +00:00
Rob G. Healey ae81cbc6ee Adding named variables to format strings for errors in 'make distcheck' to work.
svn: r14467
2010-02-24 23:07:23 +00:00
Rob G. Healey c9d41950eb Adding named variables to format strings for errors in 'make distcheck' to work.
svn: r14466
2010-02-24 23:06:21 +00:00
Rob G. Healey 8b0b4a3785 Adding named variables to format strings for errors in 'make distcheck' to work.
svn: r14465
2010-02-24 23:05:16 +00:00
Rob G. Healey 4989c9e5d4 Adding named variables to format strings for errors in 'make distcheck' to work.
svn: r14464
2010-02-24 23:04:32 +00:00
Rob G. Healey 78c286fce2 Adding named variables to format strings for errors in 'make distcheck' to work.
svn: r14463
2010-02-24 23:03:43 +00:00
Rob G. Healey ec7001837a Adding named variables to format strings for errors in 'make distcheck' to work.
svn: r14462
2010-02-24 23:02:48 +00:00
Rob G. Healey 4bf6ab292d Adding named variables to format strings for errors in 'make distcheck' to work.
svn: r14461
2010-02-24 23:01:38 +00:00
Rob G. Healey 6f6c74ae8b Adding named variables to format strings for errors in 'make distcheck' to work.
svn: r14460
2010-02-24 23:00:12 +00:00
Rob G. Healey 8440ccbf87 Adding named variables to format strings for errors in 'make distcheck' to work.
svn: r14459
2010-02-24 22:59:07 +00:00
Rob G. Healey 6cbe9e3c0d Adding named variables to format strings for errors in 'make distcheck' to work.
svn: r14458
2010-02-24 22:58:17 +00:00
Rob G. Healey f99b1ac371 Adding named variables to format strings for errors in 'make distcheck' to work.
svn: r14457
2010-02-24 22:57:18 +00:00
Rob G. Healey 848eb99bb7 Adding named variables to format strings for errors in 'make distcheck' to work.
svn: r14456
2010-02-24 22:56:31 +00:00
Rob G. Healey d1f26d9f7a Adding named variables to format strings for errors in 'make distcheck' to work.
svn: r14455
2010-02-24 22:55:25 +00:00
Rob G. Healey 51ff6e4569 Adding named variables to format strings for errors in 'make distcheck' to work.
svn: r14454
2010-02-24 22:54:03 +00:00
Erik De Richter 69e08ceafb update nl translation
svn: r14453
2010-02-24 17:14:30 +00:00
Peter Landgren fc080a686b Swedish update.
svn: r14452
2010-02-24 13:59:32 +00:00
Jérôme Rapinat bb5428d725 Update Croatian translation (by Josip)
svn: r14450
2010-02-24 10:30:37 +00:00
Peter Landgren 5604a27bf4 Fix of issue 3534.
svn: r14445
2010-02-23 13:44:42 +00:00
Peter Landgren 63430a1ce3 Fix of issue 3534.
svn: r14444
2010-02-23 13:43:21 +00:00
Serge Noiraud 7496974691 GeoView : Don't use a dot at the end of messages in the configuration window.
svn: r14442
2010-02-22 18:08:12 +00:00
Jérôme Rapinat 3a2af65bc0 merge Norwegian Nynorsk (3.1.3 -> 3.2)
svn: r14441
2010-02-22 16:30:06 +00:00
Jérôme Rapinat 26c80611b2 disable translations without active translators and too many untranslated strings
svn: r14440
2010-02-22 15:41:22 +00:00
Erik De Richter 641b7e5e07 update nl translation
svn: r14438
2010-02-22 14:26:28 +00:00
Doug Blank f6af0cb380 Changes to allow distcheck to pass
svn: r14437
2010-02-22 12:41:06 +00:00
Peter Landgren a5e4bf8637 Missed () in some contsfunc.win().
svn: r14435
2010-02-22 08:44:07 +00:00
Stéphane Charette 077d0ded1f preliminary 3.2 release notes, based on Benny's document
svn: r14433
2010-02-22 03:46:31 +00:00
Stéphane Charette 7b1eae9a5b set 3.2.0 version to 'beta1'
svn: r14432
2010-02-22 03:01:00 +00:00
Serge Noiraud 5a46c30439 GeoView : Allow message translation.
svn: r14429
2010-02-21 20:56:36 +00:00
Mirko Leonhäuser 9e742feac4 Update german translation not komplete jet
svn: r14427
2010-02-21 16:06:28 +00:00
Brian Matherly eb4e5ddc1f Create a maintenance branch for the 3.2.x series of releases.
svn: r14425
2010-02-21 14:14:21 +00:00
130 changed files with 346782 additions and 324241 deletions
+25
View File
@@ -1,3 +1,28 @@
Version 3.2.0 (beta1) -- the "I am your father" release.
* New Plugin System:
-> In the Help Menu -> Menu Status, all available plugins are visible. All
plugins can be hidden, saving resources and hiding options you do not need.
* Faster:
-> Many under the hood improvements have occurred that should improve
performance enormously. New features are implemented as plugins that can
be hidden.
-> Performance improvement example: Insertion of a new person in a family
tree with 30000 people previously took 4 seconds on a 1.4GHz PC running
Gramps 3.1, but now takes milliseconds.
* New Views:
-> There are new views, and some existing views have been greatly improved
-> People view can now be sorted on the columns
-> A Place treeview is present, nicely grouping your places under country
groups
-> GeoView has left it's beta status behind and shows your data on an online
map (OpenStreetMap or Google Maps, a fast internet connection is required)
-> Help Menu -> Extra Reports/Tools open a webpage with downloadable views
* Other Improvements:
-> Styled Notes now in most output formats that support styles
-> New languages
-> Select language in which report should be created (not yet available in
all reports)
Version 3.1.3 -- the "What name?" release.
* contains translation updates, crash fixes, bug fixes, and minor updates.
* fixes and updates to:
+3 -3
View File
@@ -11,8 +11,8 @@ AM_INIT_AUTOMAKE([1.6.3 foreign])
AC_CONFIG_MACRO_DIR([m4])
RELEASE=0.SVN$(svnversion -n .)
dnl RELEASE=0beta
RELEASE=0beta.SVN$(svnversion -n .)
dnl RELEASE=0beta3
dnl RELEASE=0rc1
dnl RELEASE=1
@@ -33,7 +33,7 @@ AC_SUBST(RELEASE)
AC_SUBST(VERSIONSTRING)
dnl Add the languages which your application supports here.
ALL_LINGUAS="hu zh_CN cs da de es fr it nb nl nn pl pt_BR ro ru sv eo fi lt sk tr bg hr sl ca mk sq he"
ALL_LINGUAS="hu zh_CN cs da de es fr it nb nl nn pl pt_BR ru sv eo fi lt sk bg hr sl ca sq"
GETTEXT_PACKAGE=gramps
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Define to the Gettext package name.])
+12 -5
View File
@@ -3,9 +3,16 @@ gramps for Debian
This is the Debian package of GRAMPS.
If you do not install python-reportlab (gramps Recommends it be
installed) then you will be able to create usable PDF files only if
your database contains solely latin (iso-8859-1) characters. Reportlab
will generate PDF files containing non-latin characters although they
are quite large as the font must be included in the file.
Regarding the extra dependencies:
Recommends: graphviz
Enable creation of graphs
Recommends: python-gtkmozembed
Recommends: python-webkit
Enable html rendering for Geographic view and Web view. If both
are installed webkit will be used. python-gtkmozembed may be more
stable.
Suggests: ttf-freefont
Allows more fonts in reports
Suggests: python-gtkspell python-enchant
allows spell checking in the notes. Both need to be installed.
+251 -6
View File
@@ -1,20 +1,265 @@
gramps (3.0.0-1) gutsy; urgency=low
gramps (3.2.0-0beta1) unstable; urgency=low
* New upstream release
* works with gtk 2.19. Closes: #566958
-- James A. Treacy <treacy@debian.org> Fri, 05 Mar 2010 14:05:39 -0500
gramps (3.1.3-2) unstable; urgency=low
* Switch to dpkg-source 3.0 (quilt) format
-- James A. Treacy <treacy@debian.org> Tue, 05 Jan 2010 20:04:30 -0500
gramps (3.1.3-1) unstable; urgency=low
* New upstream release
-- Stephane Charette <stephanecharette@gmail.com> Mon, 31 Mar 2008 19:42:05 -0700
-- James A. Treacy <treacy@debian.org> Sun, 06 Dec 2009 13:46:48 -0500
gramps (2.90.0-0beta) unstable; urgency=low
gramps (3.1.2-2) unstable; urgency=low
* allow python >= 2.5. Closes: #547150
* fix Relationship Graph to use new format for URLs. Closes: #532559
* Web report creation fixed. Closes: #537355
-- James A. Treacy <treacy@debian.org> Tue, 17 Nov 2009 11:38:43 -0500
gramps (3.1.2-1.1) unstable; urgency=low
* Non-maintainer upload.
* debian/control: drop Recommends on python-gnome2-desktop: it is now
gone and none of its modules are used anyhow (Closes: #541560)
-- Stefano Zacchiroli <zack@debian.org> Thu, 08 Oct 2009 13:52:35 +0200
gramps (3.1.2-1) unstable; urgency=low
* New upstream release.
* Replace Recommends on python-gnome2-extras with python-gtkspell
* Do not create the directory /etc/gconf/schemas/. Closes: Bug#525683
-- James A. Treacy <treacy@debian.org> Sun, 07 Jun 2009 14:01:16 -0400
gramps (3.1.1-1) unstable; urgency=low
* New upstream release.
-- James A. Treacy <treacy@debian.org> Tue, 10 Mar 2009 09:26:52 -0400
gramps (3.1.0-1) unstable; urgency=low
* New upstream release.
* link /usr/share/common-licenses/GPL-2 from /usr/share/gramps/COPYING
so gramps can find the file.
-- James A. Treacy <treacy@debian.org> Sat, 07 Mar 2009 22:03:09 -0500
gramps (3.0.4-1) unstable; urgency=low
* New upstream version. Closes: #506621, #506818
-- James A. Treacy <treacy@debian.org> Sun, 07 Dec 2008 21:39:55 -0500
gramps (3.0.3-1) unstable; urgency=low
* New upstream version
-- James A. Treacy <treacy@debian.org> Mon, 20 Oct 2008 20:43:35 -0400
gramps (3.0.2-1) unstable; urgency=low
* New upstream version
-- James A. Treacy <treacy@debian.org> Sat, 27 Sep 2008 17:25:09 -0400
gramps (3.0.1-2) unstable; urgency=low
* Remove dependency on gnome-doc-utils and scrollkeeper
* Disable spell checking in src/Spell.py due to the spell checker
crashing. Closes: #492212
Spell checking will be reenabled once the offending package is
identified and fixed.
-- James A. Treacy <treacy@debian.org> Fri, 29 Aug 2008 11:09:04 -0400
gramps (3.0.1-1) unstable; urgency=low
* New upstream version
-- James A. Treacy <treacy@debian.org> Mon, 19 May 2008 09:38:28 -0400
gramps (3.0.0-6) unstable; urgency=low
* Fix typo in _EditChildRef.py which can cause gramps to crash. Closes: #476163
-- James A. Treacy <treacy@debian.org> Tue, 15 Apr 2008 23:37:04 -0400
gramps (3.0.0-5) unstable; urgency=low
* Remove gtkspell Recommends as it is now provided by python-gnome2-extras.
Closes: Bug#474755
-- James A. Treacy <treacy@debian.org> Mon, 07 Apr 2008 17:25:18 -0400
gramps (3.0.0-4) unstable; urgency=low
* Fix the binary package python dependency properly. A recent python
(>= 2.4.4-6) is needed to ensure python2.5 is supported properly.
Closes: #474056
-- James A. Treacy <treacy@debian.org> Thu, 03 Apr 2008 09:46:28 -0400
gramps (3.0.0-3) unstable; urgency=low
* Build-Depends on Python2.5. Closes: Bug#473946, #474056
-- James A. Treacy <treacy@debian.org> Wed, 02 Apr 2008 08:28:27 -0400
gramps (3.0.0-2) unstable; urgency=low
* Explicitly require python version >= 2.5
-- James A. Treacy <treacy@debian.org> Wed, 26 Mar 2008 09:34:25 -0400
gramps (3.0.0-1) unstable; urgency=low
* New upstream release. Closes: #472681
-- James A. Treacy <treacy@debian.org> Tue, 25 Mar 2008 09:35:00 -0400
gramps (2.2.10-2) unstable; urgency=low
* Remove build dependency on python-xml. Closes: Bug#468625
-- James A. Treacy <treacy@debian.org> Fri, 29 Feb 2008 13:30:11 -0500
gramps (2.2.10-1) unstable; urgency=low
* New upstream release
* Added dh_icons to debian/rules. Closes: #454761
* Remove version from scrollkeeper dependency. Closes: #456600
* Fixed typos in description. Closes: #433559
-- James A. Treacy <treacy@debian.org> Mon, 14 Jan 2008 09:57:25 -0500
gramps (2.2.9-2) unstable; urgency=low
* Move debhelper to Build-Depends. Closes: #447948
-- James A. Treacy <treacy@debian.org> Wed, 24 Oct 2007 20:03:36 -0400
gramps (2.2.9-1) unstable; urgency=low
* New upstream release
-- Stephane Charette <stephanecharette@gmail.com> Wed, 16 Jan 2008 21:45:00 -0800
-- James A. Treacy <treacy@debian.org> Thu, 18 Oct 2007 13:14:30 -0400
gramps (2.1.6-1) unstable; urgency=low
gramps (2.2.8-2) unstable; urgency=low
* Work around a bug in gnome-python-extras which caused a deallocation
of the TextView in the check if a spell checker is present.
Closes: #445864
-- James A. Treacy <treacy@debian.org> Tue, 09 Oct 2007 17:26:54 -0400
gramps (2.2.8-1) unstable; urgency=low
* New Upstream version
* Misleading error message changed. Closes: #418033
-- James A. Treacy <treacy@debian.org> Mon, 28 May 2007 21:00:51 -0400
gramps (2.2.7-2) unstable; urgency=low
* Added dependency on librsvg2-common
-- James A. Treacy <treacy@debian.org> Mon, 23 Apr 2007 19:32:00 -0400
gramps (2.2.7-1) unstable; urgency=low
* New upstream version
-- James A. Treacy <treacy@debian.org> Sun, 22 Apr 2007 20:08:55 -0400
gramps (2.2.6-1) unstable; urgency=low
* New upstream version
-- James A. Treacy <treacy@debian.org> Mon, 29 Jan 2007 20:12:05 -0500
gramps (2.2.5-0rc1-1) unstable; urgency=low
* rc1 of 2.2.5
-- James A. Treacy <treacy@debian.org> Thu, 25 Jan 2007 23:04:24 -0500
gramps (2.2.4-1) unstable; urgency=low
* New upstream release
-- Alex Roitman <shura@gramps-project.org> Thu, 22 Jun 2006 13:28:14 -0700
-- James A. Treacy <treacy@debian.org> Wed, 27 Dec 2006 18:04:11 -0500
gramps (2.2.3-1) unstable; urgency=low
* New upstream release
-- James A. Treacy <treacy@debian.org> Mon, 27 Nov 2006 00:27:23 -0500
gramps (2.2.2-2) unstable; urgency=low
* call dh_desktop in debian/rules so .desktop file is registered. Closes: Bug#398423
-- James A. Treacy <treacy@debian.org> Mon, 13 Nov 2006 20:26:00 -0500
gramps (2.2.2-1) unstable; urgency=low
* Bumped upstream version number. 2.2.1-3 and -4 should have been 2.2.2
-- James A. Treacy <treacy@debian.org> Sat, 4 Nov 2006 16:34:47 -0500
gramps (2.2.1-4) unstable; urgency=low
* add missing Build-Depends-Indep. Closes: #396874
-- James A. Treacy <treacy@debian.org> Fri, 3 Nov 2006 11:03:35 -0500
gramps (2.2.1-3) unstable; urgency=low
* New Upstream release
-- James A. Treacy <treacy@debian.org> Fri, 3 Nov 2006 08:07:38 -0500
gramps (2.2.1-2) unstable; urgency=low
* Upload to sid
-- James A. Treacy <treacy@debian.org> Wed, 1 Nov 2006 20:50:28 -0500
gramps (2.2.1-1) experimental; urgency=low
* New upstream release
-- James A. Treacy <treacy@debian.org> Mon, 30 Oct 2006 10:32:43 -0500
gramps (2.1.95-1) experimental; urgency=low
* Beta release of version 2.2
-- James A. Treacy <treacy@debian.org> Tue, 29 Aug 2006 11:40:08 -0400
gramps (2.1.90-1) experimental; urgency=low
* Beta release of version 2.2
-- James A. Treacy <treacy@debian.org> Tue, 25 Jul 2006 00:18:15 -0400
gramps (2.0.11-2) unstable; urgency=low
* Complies with new python policy
-- James A. Treacy <treacy@debian.org> Wed, 5 Jul 2006 14:47:56 -0400
gramps (2.0.11-1) unstable; urgency=low
+1 -1
View File
@@ -1 +1 @@
4
7
+20 -16
View File
@@ -1,23 +1,27 @@
Source: gramps
Section: gnome
Priority: optional
Maintainer: James A. Treacy <treacy@debian.org>
Build-Depends-Indep: debhelper (>=5.0.37.2), python-xml, python-gnome2, python-glade2, scrollkeeper, libglib2.0-dev, build-essential, gnome-doc-utils, intltool, xsltproc, python-central (>= 0.4.17)
Standards-Version: 3.6.2
XS-Python-Version: current
Maintainer: Stéphane Charette <stephanecharette@gmail.com>
Build-Depends-Indep: libxml-parser-perl, python-gtk2, gettext, libgconf2-dev, python-central (>= 0.5.6), python, intltool
Build-Depends: debhelper (>= 7)
Standards-Version: 3.8.3
Homepage: http://www.gramps-project.org/
XS-Python-Version: >=2.5
Package: gramps
Architecture: all
Depends: ${python:Depends}, python-gnome2, python-glade2, ${misc:Depends}
Replaces: gramps-manual, gramps-extending-doc, gramps-help
Conflicts: gramps-manual, gramps-extending-doc, gramps-common
Recommends: graphviz, ttf-freefont, python-reportlab, python-gnome2-extras
Description: Genealogical Research and Analysis Management Program
GRAMPS, the Genealogical Research and Analysis Management Programming
System, is an Open Source genealogy program written in Python, using
the GTK/GNOME interface.
GRAMPS has the ability to import GEDCOM files that are used in such
programs as FamilyTree Maker for Windows and can produce reports
in various formats such as the popular ABIWord and OpenOffice.org
formats as well as HTML and PDF.
Depends: ${python:Depends}, librsvg2-common, python-gtk2, xdg-utils, ${misc:Depends}
Replaces: gramps-manual, gramps-extending-doc
Conflicts: gramps-manual, gramps-extending-doc, gramps-common, python-gtk-1.2
Recommends: graphviz, python-webkit, python-gtkmozembed
Suggests: ttf-freefont, python-enchant, python-gtkspell
Description: Genealogical research program
GRAMPS is an Open Source genealogy program written in Python, using
the GTK/GNOME interface. It is an extremely flexible program fitting
the needs for both the amateur genealogist and serious genealogical
researcher.
GRAMPS has the ability to import GEDCOM files exported from many
proprietary genealogy programs and can produce a large number of
reports in many popular formats.
XB-Python-Version: ${python:Versions}
+1
View File
@@ -1 +1,2 @@
usr/share/pixmaps
usr/share/mime/packages
+3
View File
@@ -0,0 +1,3 @@
/usr/bin/
/usr/share/
/etc
+1 -1
View File
@@ -1,3 +1,3 @@
?package(gramps):needs="X11" section="Apps/Tools"\
?package(gramps):needs="X11" section="Applications/Office"\
title="gramps" command="/usr/bin/gramps"\
icon="/usr/share/pixmaps/gramps.xpm"
+1
View File
@@ -0,0 +1 @@
2
+29 -32
View File
@@ -4,71 +4,68 @@ build: build-stamp
build-stamp:
dh_testdir
./configure \
--enable-packager-mode \
--disable-scrollkeeper \
--prefix=/usr \
--mandir=\$${prefix}/share/man \
--sysconfdir=/etc
#./autogen.sh --prefix=/usr --mandir=\$${prefix}/share/man --sysconfdir=/etc
./configure --enable-packager-mode --prefix=/usr --mandir=\$${prefix}/share/man --sysconfdir=/etc
# ./configure --prefix=`pwd`/debian/tmp/usr --mandir=\$${prefix}/share/man
$(MAKE)
# $(MAKE) html
touch build-stamp
clean:
dh_testdir
dh_testroot
-rm -f build-stamp
-$(MAKE) clean
-rm -f src/*.pyo src/*/*.pyo src/*/*/*.pyo src/*/*/*/*.pyo
-rm -f config.status config.log
# [ ! -f Makefile ] || $(MAKE) distclean
# -rm -f src/*.pyo src/*/*.pyo
# -rm -f config.status config.log
dh_auto_clean
dh_clean
install: build
dh_testdir
dh_testroot
dh_clean -k
dh_prep
dh_installdirs
GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1
# Add here commands to install the package into debian/tmp.
# GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1
$(MAKE) install DESTDIR=`pwd`/debian/gramps
# Remove help-related dirs, they will go into gramps-help package
-rm -rf debian/gramps/usr/share/gnome
-rm -rf debian/gramps/usr/share/omf
# Remove byte-compiled python files
-rm -f debian/gramps/usr/share/gramps/COPYING
ln -s /usr/share/common-licenses/GPL-2 debian/gramps/usr/share/gramps/COPYING
-rm -rf debian/gramps/usr/var
# cp src/data/gramps.xml debian/gramps/usr/share/mime/packages
-find debian/gramps/usr/share/ -name "*.pyo" -exec rm -f '{}' ';'
# Copy icon file
cp debian/gramps.xpm debian/gramps/usr/share/pixmaps/
# cp src/gramps.xpm debian/tmp/usr/share/pixmaps/
#cp src/data/gramps.svg debian/gramps/usr/share/pixmaps/
#chmod 644 debian/gramps/usr/share/pixmaps/gramps.svg
# Instal gramps-help things
#$(MAKE) -C help install DESTDIR=`pwd`/debian/gramps-help
# cp src/images/gramps.svg debian/gramps/usr/share/pixmaps/
# chmod 644 debian/gramps/usr/share/pixmaps/gramps.svg
# Build architecture-independent files here.
binary-indep: build install
dh_testdir
dh_testroot
dh_installdocs
dh_installmenu --package=gramps
dh_installman --package=gramps
dh_installdocs FAQ
dh_installmenu
# dh_installman
dh_installmime -i
dh_installchangelogs --package=gramps ChangeLog
#dh_installchangelogs --package=gramps-help help/ChangeLog
dh_gconf --package=gramps
#dh_scrollkeeper --package=gramps-help
# dh_installchangelogs ChangeLog
dh_installchangelogs
dh_icons
# dh_movefiles -i
# dh_gconf -i
dh_link -i
dh_compress -i
dh_fixperms -i
dh_python --package=gramps
dh_installdeb -i
dh_pycentral -i
dh_installdeb -i
dh_gencontrol -i
dh_md5sums -i
dh_builddeb -i
# Build architecture-dependent files here.
binary-arch: build install
+4 -9
View File
@@ -381,7 +381,6 @@ src/plugins/drawreport/TimeLine.py
# plugins/export directory
src/plugins/export/export.gpr.py
src/plugins/export/ExportCsv.py
src/plugins/export/ExportDjango.gpr.py
src/plugins/export/ExportFtree.py
src/plugins/export/ExportGedcom.py
src/plugins/export/ExportGeneWeb.py
@@ -398,6 +397,7 @@ src/plugins/gramplet/AttributesGramplet.py
src/plugins/gramplet/CalendarGramplet.py
src/plugins/gramplet/DescendGramplet.py
src/plugins/gramplet/FanChartGramplet.py
src/plugins/gramplet/FaqGramplet.py
src/plugins/gramplet/GivenNameGramplet.py
src/plugins/gramplet/gramplet.gpr.py
src/plugins/gramplet/PedigreeGramplet.py
@@ -420,8 +420,6 @@ src/plugins/graph/GVRelGraph.py
# plugins/import directory
src/plugins/import/import.gpr.py
src/plugins/import/ImportCsv.py
src/plugins/import/ImportDjango.gpr.py
src/plugins/import/ImportDjango.py
src/plugins/import/ImportGedcom.py
src/plugins/import/ImportGeneWeb.py
src/plugins/import/ImportGrdb.py
@@ -506,7 +504,6 @@ src/plugins/textreport/Summary.py
src/plugins/textreport/textplugins.gpr.py
# plugins/tool directory
src/plugins/tool/CalculateEstimatedDates.py
src/plugins/tool/ChangeNames.py
src/plugins/tool/ChangeTypes.py
src/plugins/tool/Check.py
@@ -534,8 +531,8 @@ src/plugins/tool/Verify.py
#plugins/view directory
src/plugins/view/eventview.py
src/plugins/view/familyview.py
src/plugins/view/fanchartview.gpr.py
src/plugins/view/fanchartview.py
src/plugins/view/fanchartview.gpr.py
src/plugins/view/geoview.py
src/plugins/view/geoview.gpr.py
src/plugins/view/grampletview.py
@@ -543,8 +540,6 @@ src/plugins/view/htmlrenderer.py
src/plugins/view/mediaview.py
src/plugins/view/noteview.py
src/plugins/view/pedigreeview.py
src/plugins/view/pedigreeviewext.py
src/plugins/view/pedigreeviewext.gpr.py
src/plugins/view/personlistview.py
src/plugins/view/persontreeview.py
src/plugins/view/placelistview.py
@@ -895,8 +890,8 @@ src/plugins/tool/verify.glade
#
# web
#
src/web/grampsdb/views.py
src/web/utils.py
#src/web/grampsdb/views.py
#src/web/utils.py
#
# Files to extract from and then merge into
#
+4 -1
View File
@@ -11,6 +11,8 @@ src/gen/lib/styledtexttagtype.py
src/LdsUtils.py
src/Mime/_WinMime.py
src/plugins/docgen/PdfDoc.py
src/plugins/export/ExportDjango.gpr.py
src/plugins/import/ImportDjango.gpr.py
src/plugins/gramplet/DeepConnections.py
src/plugins/gramplet/NoteGramplet.py
src/plugins/gramplet/PluginManagerGramplet.py
@@ -21,8 +23,9 @@ src/plugins/tool/DumpGenderStats.py
src/plugins/tool/PHPGedViewConnector.py
src/plugins/tool/TestcaseGenerator.py
src/plugins/tool/phpgedview.glade
src/plugins/gramplet/FaqGramplet.py
src/plugins/gramplet/HeadlineNewsGramplet.py
src/plugins/quickview/AllNames.py
src/plugins/quickview/Query.py
src/ReportBase/_DocReportDialog.py
src/web/grampsdb/views.py
src/web/utils.py
+4489 -4071
View File
File diff suppressed because it is too large Load Diff
+9561 -6995
View File
File diff suppressed because it is too large Load Diff
+21107 -20067
View File
File diff suppressed because it is too large Load Diff
+19623 -19408
View File
File diff suppressed because it is too large Load Diff
+13890 -14263
View File
File diff suppressed because it is too large Load Diff
+1812 -3233
View File
File diff suppressed because it is too large Load Diff
+22309 -19974
View File
File diff suppressed because it is too large Load Diff
+4625 -4142
View File
File diff suppressed because it is too large Load Diff
+4636 -4129
View File
File diff suppressed because it is too large Load Diff
+1357 -1935
View File
File diff suppressed because it is too large Load Diff
+1140 -1438
View File
File diff suppressed because it is too large Load Diff
+19385 -18871
View File
File diff suppressed because it is too large Load Diff
+19880 -18337
View File
File diff suppressed because it is too large Load Diff
+4582 -4130
View File
File diff suppressed because it is too large Load Diff
+6070 -4881
View File
File diff suppressed because it is too large Load Diff
+2455 -2567
View File
File diff suppressed because it is too large Load Diff
+21088 -18826
View File
File diff suppressed because it is too large Load Diff
+7245 -6781
View File
File diff suppressed because it is too large Load Diff
+2346 -2539
View File
File diff suppressed because it is too large Load Diff
+18726 -17467
View File
File diff suppressed because it is too large Load Diff
+13942 -12557
View File
File diff suppressed because it is too large Load Diff
+20901 -20843
View File
File diff suppressed because it is too large Load Diff
+21958 -19062
View File
File diff suppressed because it is too large Load Diff
+1759 -1698
View File
File diff suppressed because it is too large Load Diff
+4635 -4130
View File
File diff suppressed because it is too large Load Diff
+21425 -18932
View File
File diff suppressed because it is too large Load Diff
+20658 -18242
View File
File diff suppressed because it is too large Load Diff
+4194 -3973
View File
File diff suppressed because it is too large Load Diff
+3055 -2730
View File
File diff suppressed because it is too large Load Diff
+20971 -18212
View File
File diff suppressed because it is too large Load Diff
+5603 -5676
View File
File diff suppressed because it is too large Load Diff
+77 -17
View File
@@ -56,27 +56,87 @@ class DateParserDE(DateParser):
month_to_int[u"jan"] = 1
month_to_int[u"jänner"] = 1
month_to_int[u"jän"] = 1
# Add other common latin, local and historical variants
# Add other common latin,
month_to_int[u"januaris"] = 1
month_to_int[u"januarii"] = 1
month_to_int[u"januarius"] = 1
month_to_int[u"februaris"] = 2
month_to_int[u"februarii"] = 2
month_to_int[u"februarius"] = 2
month_to_int[u"martii"] = 3
month_to_int[u"martius"] = 3
month_to_int[u"aprilis"] = 4
month_to_int[u"maius"] = 5
month_to_int[u"maii"] = 5
month_to_int[u"junius"] = 6
month_to_int[u"junii"] = 6
month_to_int[u"julius"] = 7
month_to_int[u"julii"] = 7
month_to_int[u"augustus"] = 8
month_to_int[u"augusti"] = 8
month_to_int[u"septembris"] = 9
month_to_int[u"7bris"] = 9
month_to_int[u"september"] = 9
month_to_int[u"october"] = 10
month_to_int[u"octobris"] = 10
month_to_int[u"8bris"] = 10
month_to_int[u"novembris"] = 11
month_to_int[u"9bris"] = 11
month_to_int[u"november"] = 11
month_to_int[u"decembris"] = 12
month_to_int[u"10bris"] = 12
month_to_int[u"xbris"] = 12
month_to_int[u"december"] = 12
# local and historical variants
month_to_int[u"jenner"] = 1
month_to_int[u"feber"] = 2
month_to_int[u"februaris"] = 2
month_to_int[u"merz"] = 3
month_to_int[u"aprilis"] = 4
month_to_int[u"maius"] = 5
month_to_int[u"junius"] = 6
month_to_int[u"julius"] = 7
month_to_int[u"augst"] = 8
month_to_int[u"7ber"] = 9
month_to_int[u"7bris"] = 9
month_to_int[u"8ber"] = 10
month_to_int[u"8bris"] = 10
month_to_int[u"9ber"] = 11
month_to_int[u"9bris"] = 11
month_to_int[u"10ber"] = 12
month_to_int[u"10bris"] = 12
month_to_int[u"xber"] = 12
month_to_int[u"xbris"] = 12
# old german names
month_to_int[u"hartung"] = 1
month_to_int[u"eismond"] = 1
month_to_int[u"hornung"] = 2
month_to_int[u"schmelzmond"] = 2
month_to_int[u"taumond"] = 2
month_to_int[u"narrenmond"] = 2
month_to_int[u"rebmond"] = 2
month_to_int[u"hintester"] = 2
month_to_int[u"lenzing"] = 3
month_to_int[u"lenzmond"] = 3
month_to_int[u"launing"] = 4
month_to_int[u"ostermond"] = 4
month_to_int[u"winnemond"] = 5
month_to_int[u"weidenmonat"] = 5
month_to_int[u"blumenmond"] = 5
month_to_int[u"brachet"] = 6
month_to_int[u"brachmond"] = 6
month_to_int[u"heuert"] = 7
month_to_int[u"heumond"] = 7
month_to_int[u"ernting"] = 8
month_to_int[u"erntemond"] = 8
month_to_int[u"bisemond"] = 8
month_to_int[u"scheiding"] = 9
month_to_int[u"herbstmond"] = 9
month_to_int[u"gilbhard"] = 10
month_to_int[u"gilbhart"] = 10
month_to_int[u"windmond"] = 11
month_to_int[u"nebelung"] = 11
month_to_int[u"wintermond"] = 11
month_to_int[u"julmond"] = 12
month_to_int[u"heilmond"] = 12
month_to_int[u"christmond"] = 12
month_to_int[u"dustermond"] = 12
modifier_to_int = {
u'vor' : Date.MOD_BEFORE,
@@ -137,13 +197,13 @@ class DateDisplayDE(DateDisplay):
"""
German language date display class.
"""
# TODO: Translate these month strings:
long_months = ( u"", u"January", u"February", u"March", u"April", u"May",
u"June", u"July", u"August", u"September", u"October",
u"November", u"December" )
short_months = ( u"", u"Jan", u"Feb", u"Mar", u"Apr", u"May", u"Jun",
u"Jul", u"Aug", u"Sep", u"Oct", u"Nov", u"Dec" )
long_months = ( u"", u"Januar", u"Februar", u"März", u"April", u"Mai",
u"Juni", u"Juli", u"August", u"September", u"Oktober",
u"November", u"Dezember" )
short_months = ( u"", u"Jan", u"Feb", u"Mär", u"Apr", u"Mai", u"Jun",
u"Jul", u"Aug", u"Sep", u"Okt", u"Nov", u"Dez" )
calendar = (
"", u" (julianisch)", u" (hebräisch)",
+31 -3
View File
@@ -80,10 +80,22 @@ class History(gen.utils.Callback):
'mru-changed' : (list, )
}
def __init__(self):
def __init__(self, dbstate, nav_type):
gen.utils.Callback.__init__(self)
self.clear()
dbstate.connect('database-changed', self.connect_signals)
self.signal_map = {}
self.signal_map[nav_type.lower() + '-delete'] = self.handles_removed
self.signal_map[nav_type.lower() + '-rebuild'] = self.history_changed
def connect_signals(self, dbstate):
"""
Connects database signals when the database has changed.
"""
for sig in self.signal_map:
dbstate.connect(sig, self.signal_map[sig])
def clear(self):
"""
Clears the history, resetting the values back to their defaults
@@ -191,6 +203,22 @@ class History(gen.utils.Callback):
if not self.at_end():
self.history = self.history[0:self.index+1]
def handles_removed(self, handle_list):
"""
Called in response to an object-delete signal.
Removes a list of handles from the history.
"""
for handle in handle_list:
self.remove(handle)
def history_changed(self):
"""
Called in response to an object-rebuild signal.
Objects in the history list may have been deleted.
"""
self.clear()
self.emit('mru-changed', (self.mru, ))
#-------------------------------------------------------------------------
#
# Recent Docs Menu
@@ -370,13 +398,13 @@ class DisplayState(gen.utils.Callback):
"""
return self.history_lookup.get((nav_type, nav_group))
def register(self, nav_type, nav_group):
def register(self, dbstate, nav_type, nav_group):
"""
Create a history and navigation object for the specified
navigation type and group, if they don't exist.
"""
if (nav_type, nav_group) not in self.history_lookup:
history = History()
history = History(dbstate, nav_type)
self.history_lookup[(nav_type, nav_group)] = history
def get_active(self, nav_type, nav_group=0):
+1
View File
@@ -28,6 +28,7 @@ gdir_PYTHON = \
Bookmarks.py\
config.py\
const.py\
constfunc.py\
DateEdit.py\
Date.py\
DbState.py\
+15 -7
View File
@@ -536,16 +536,22 @@ class GuiFamilyOption(gtk.HBox):
def __initialize_family(self):
"""
Find a family to initialize the option with. Any family will do, but
try to find a family that the user is likely interested in.
Find a family to initialize the option with. If there is no active
family, try to find a family that the user is likely interested in.
"""
family_list = []
# First try the family of the active person
person_handle = self.__uistate.get_active('Person')
person = self.__dbstate.db.get_person_from_handle(person_handle)
if person:
family_list = person.get_family_handle_list()
# Use the active family if one is selected
family = self.__uistate.get_active('Family')
if family:
family_list = [family]
if not family_list:
# Next try the family of the active person
person_handle = self.__uistate.get_active('Person')
person = self.__dbstate.db.get_person_from_handle(person_handle)
if person:
family_list = person.get_family_handle_list()
if not family_list:
# Next try the family of the default person in the database.
@@ -558,6 +564,8 @@ class GuiFamilyOption(gtk.HBox):
for family in self.__db.iter_family_handles():
self.__update_family(family)
break
else:
self.__update_family(family_list[0])
def __get_family_clicked(self, obj): # IGNORE:W0613 - obj is unused
"""
+6 -2
View File
@@ -569,6 +569,11 @@ class PluginStatus(ManagedWindow.ManagedWindow):
# If this version is not installed, or > installed, install it
good_gpr.add(gpr_file)
callback(" " + (_("'%s' is for this version of Gramps.") % gpr_file) + "\n")
else:
# If the plugin is for another version; inform and do nothing
callback(" " + (_("'%s' is for NOT this version of Gramps.") % gpr_file) + "\n")
callback(" " + (_("It is for version %d.%d" % vtup) + "\n"))
continue
else:
# another register function doesn't have gramps_target_version
if gpr_file in good_gpr:
@@ -659,7 +664,6 @@ class PluginStatus(ManagedWindow.ManagedWindow):
# i = (filename, module, pdata)
pdata = i[2]
modname = i[1].__name__
descr = self.__pmgr.get_module_description(modname)
hidden = pdata.id in self.hidden
if hidden:
hiddenstr = self.HIDDEN
@@ -667,7 +671,7 @@ class PluginStatus(ManagedWindow.ManagedWindow):
hiddenstr = self.AVAILABLE
self.model.append(row=[
'<span weight="bold" color="#267726">%s</span>' % _("OK"),
i[0], descr, None, pdata.id, hiddenstr])
i[0], pdata.description, None, pdata.id, hiddenstr])
def __populate_reg_list(self):
""" Build list of registered plugins"""
+4 -4
View File
@@ -923,10 +923,10 @@ class RelationshipCalculator(object):
rel1 == rel2[:len(rel1)]:
#loop, keep one message in storage!
self.__loopDetected = True
self.__msg += [_("Relationship loop detected:") + \
_("Person %s connects to himself via %s") % \
(person.get_primary_name().get_name(),
rel2[len(rel1):])]
self.__msg += [_("Relationship loop detected:") + " " +
_("Person %(person)s connects to himself via %(relation)s") %
{'person' : person.get_primary_name().get_name(),
'relation' : rel2[len(rel1):] }]
return
elif store:
pmap[person.handle] = [[rel_str], [rel_fam]]
+5 -2
View File
@@ -639,7 +639,10 @@ def report(dbstate, uistate, person, report_class, options_class,
except:
LOG.error("Failed to run report.", exc_info=True)
break
elif (response == gtk.RESPONSE_DELETE_EVENT or
response == gtk.RESPONSE_CANCEL):
elif response == gtk.RESPONSE_CANCEL:
dialog.close()
break
elif response == gtk.RESPONSE_DELETE_EVENT:
#just stop, in ManagedWindow, delete-event is already coupled to
#correct action.
break
+16 -3
View File
@@ -88,12 +88,13 @@ class StyleListDisplay(object):
_('Document Styles') )
self.top.connect_signals({
"destroy_passed_object" : self.__close,
"destroy_passed_object" : self.__close,
"on_ok_clicked" : self.on_ok_clicked,
"on_add_clicked" : self.on_add_clicked,
"on_delete_clicked" : self.on_delete_clicked,
"on_button_press" : self.on_button_press,
"on_edit_clicked" : self.on_edit_clicked
"on_edit_clicked" : self.on_edit_clicked,
"on_save_style_clicked" : dummy_callback,
})
title_label = self.top.get_object('title')
@@ -198,7 +199,12 @@ class StyleEditor(object):
self.top.connect_signals({
"on_save_style_clicked" : self.on_save_style_clicked,
"destroy_passed_object" : self.__close,
"destroy_passed_object" : self.__close,
"on_ok_clicked" : dummy_callback,
"on_add_clicked" : dummy_callback,
"on_delete_clicked" : dummy_callback,
"on_button_press" : dummy_callback,
"on_edit_clicked" : dummy_callback,
})
self.pname = self.top.get_object('pname')
@@ -363,3 +369,10 @@ class StyleEditor(object):
self.current_name = store.get_value(node, 0)
self.current_p = objs[0]
self.draw()
def dummy_callback(obj):
"""Dummy callback to satisfy gtkbuilder on connect of signals.
There are two widgets in the glade file, although only one is needed,
the signals of the other must be connected too
"""
pass
+41 -9
View File
@@ -948,33 +948,52 @@ class ScratchPadListView(object):
def database_changed(self,db):
self._db = db
# Note: delete event is emitted before the delete, so checking
# if valid on this is useless !
db_signals = (
'person-update',
'person-rebuild',
'family-update',
'family-delete',
'family-rebuild',
'source-update',
'source-rebuild',
'place-update',
'place-delete',
'place-rebuild',
'media-update',
'media-delete',
'media-rebuild',
'event-update',
'event-rebuild',
'repository-update',
'repository-rebuild'
'repository-rebuild',
'note-rebuild'
)
for signal in db_signals:
self._db.connect(signal,self.remove_invalid_objects)
self._db.connect('person-delete', gen_del_obj(self.delete_object, 'person-link'))
self._db.connect('source-delete', gen_del_obj(self.delete_object, 'source-link'))
self._db.connect('repository-delete', gen_del_obj(self.delete_object, 'repo-link'))
self._db.connect('event-delete', gen_del_obj(self.delete_object, 'pevent'))
self._db.connect('person-delete',
gen_del_obj(self.delete_object, 'person-link'))
self._db.connect('person-delete',
gen_del_obj(self.delete_object_ref, 'personref'))
self._db.connect('source-delete',
gen_del_obj(self.delete_object, 'source-link'))
self._db.connect('source-delete',
gen_del_obj(self.delete_object_ref, 'srcref'))
self._db.connect('repository-delete',
gen_del_obj(self.delete_object, 'repo-link'))
self._db.connect('event-delete',
gen_del_obj(self.delete_object, 'pevent'))
self._db.connect('event-delete',
gen_del_obj(self.delete_object_ref, 'eventref'))
self._db.connect('media-delete',
gen_del_obj(self.delete_object, 'mediaobj'))
self._db.connect('media-delete',
gen_del_obj(self.delete_object_ref, 'mediaref'))
self._db.connect('place-delete',
gen_del_obj(self.delete_object, 'place-link'))
self._db.connect('note-delete',
gen_del_obj(self.delete_object, 'note-link'))
# family-delete not needed, cannot be dragged!
self.remove_invalid_objects()
@@ -996,6 +1015,16 @@ class ScratchPadListView(object):
if data[2] in handle_list:
model.remove(o.iter)
def delete_object_ref(self, handle_list, link_type):
model = self._widget.get_model()
if model:
for o in model:
if o[0] == link_type:
data = o[1]._obj.get_reference_handle()
if data in handle_list:
model.remove(o.iter)
# Method to manage the wrapper classes.
def register_wrapper_classes(self):
@@ -1153,7 +1182,6 @@ class ScratchPadListView(object):
# remember time for double drop workaround.
self._previous_drop_time = realTime
# proxy methods to provide access to the real widget functions.
def set_model(self,model=None):
@@ -1237,6 +1265,10 @@ class ScratchPadWindow(ManagedWindow.ManagedWindow):
self.object_list.set_model(ScratchPadWindow.otree)
#Database might have changed, objects might have been removed,
#we need to reevaluate if all data is valid
self.object_list.remove_invalid_objects()
self.top.connect_signals({
"on_close_scratchpad" : self.close,
"on_clear_clicked": self.on_clear_clicked,
+10 -8
View File
@@ -456,18 +456,20 @@ class ProbablyAlive(object):
# If the recorded death year is before current year then
# things are simple.
if death_ref and death_ref.get_role().is_primary():
death = self.db.get_event_from_handle(death_ref.ref)
if death and death.get_date_object().get_start_date() != gen.lib.Date.EMPTY:
death_date = death.get_date_object()
if death_ref:
death = self.db.get_event_from_handle(death_ref.ref)
if death and death.get_date_object().get_start_date() != gen.lib.Date.EMPTY:
death_date = death.get_date_object()
# Look for Cause Of Death, Burial or Cremation events.
# These are fairly good indications that someone's not alive.
if not death_date:
for ev_ref in person.get_primary_event_ref_list():
ev = self.db.get_event_from_handle(ev_ref.ref)
if ev and ev.type.is_death_fallback():
death_date = ev.get_date_object()
explain = _("death-related evidence")
if ev_ref:
ev = self.db.get_event_from_handle(ev_ref.ref)
if ev and ev.type.is_death_fallback():
death_date = ev.get_date_object()
explain = _("death-related evidence")
# If they were born within X years before current year then
# assume they are alive (we already know they are not dead).
@@ -838,7 +840,7 @@ def probably_alive(person, db,
return False
# FIXME: use match here:
# if the current_date is before birth, not alive:
if (birth - current_date)[0] >= 0:
if (birth - current_date)[0] > 0:
if return_range:
return (False, birth, death, explain, relative)
else:
+8
View File
@@ -52,6 +52,7 @@ LOG = logging.getLogger(".clidbman")
import gen.db
from gen.plug import BasePluginManager
import config
import constfunc
#-------------------------------------------------------------------------
#
@@ -367,6 +368,13 @@ def time_val(dirpath):
meta = os.path.join(dirpath, META_NAME)
if os.path.isfile(meta):
tval = os.stat(meta)[9]
# This gives creation date in Windows, but correct date in Linux
if constfunc.win():
# Try to use last modified date instead in Windows
# and check that it is later than the creation date.
tval_mod = os.stat(meta)[8]
if tval_mod > tval:
tval = tval_mod
last = time.strftime('%x %X', time.localtime(tval))
else:
tval = 0
-7
View File
@@ -205,13 +205,6 @@ register('interface.pedview-layout', 0)
register('interface.pedview-show-images', True)
register('interface.pedview-show-marriage', False)
register('interface.pedview-tree-size', 0)
register('interface.pedviewext-layout', 0)
register('interface.pedviewext-show-images', True)
register('interface.pedviewext-show-marriage', False)
register('interface.pedviewext-tree-size', 5)
register('interface.pedviewext-tree-direction', 2)
register('interface.pedviewext-scroll-direction', False)
register('interface.pedviewext-show-unknown-peoples', False)
register('interface.person-height', 550)
register('interface.person-ref-height', 350)
register('interface.person-ref-width', 600)
+1 -1
View File
@@ -190,7 +190,7 @@ else:
#
#-------------------------------------------------------------------------
COPYRIGHT_MSG = u"\u00A9 2001-2006 Donald N. Allingham\n" \
u"\u00A9 2007-2009 The Gramps Developers"
u"\u00A9 2007-2010 The Gramps Developers"
COMMENTS = _("Gramps (Genealogical Research and Analysis "
"Management Programming System) is a personal "
"genealogy program.")
+2 -2
View File
@@ -1178,7 +1178,7 @@ div#Addresses {
}
div#Addresses table.infolist {
font-size: 12px;
background- color: #D8F3D6;
background-color: #D8F3D6;
}
div#Addresses table.infolist tbody tr td {
border-bottom: solid 1px #5D835F;
@@ -1193,7 +1193,7 @@ div#Addresses table.infolist tbody tr td.ColumnCity {
width: 8%;
}
div#Addresses table.infolist tbody tr td.ColumnCounty {
with: 8%;
width: 8%;
}
div#Addresses table.infolist tbody tr td.ColumnState {
width: 12%;
+81 -75
View File
@@ -1,124 +1,130 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Id$ -->
<authors xmlns:html="http://www.w3.org/1999/xhtml">
<author uid="rshura" title="author">
Alex Roitman &lt;<html:a href="mailto:shura@gramps-project.org">shura@gramps-project.org</html:a>&gt;
</author>
<author uid="asleinius" title="contributor">
Arturas Sleinius &lt;<html:a href="mailto:asleinius@users.sourceforge.net">asleinius@users.sourceforge.net</html:a>&gt;
</author>
<author uid="bmcage" title="author">
Benny Malengier &lt;<html:a href="mailto:benny.malengier@gramps-project.org">benny.malengier@gramps-project.org</html:a>&gt;
</author>
<author uid="borilg" title="contributor">
Boril Gourinov &lt;<html:a href="mailto:boril.gourinov@gmail.com">boril.gourinov@gmail.com</html:a>&gt;
</author>
<author uid="pez4brian" title="author">
Brian Matherly &lt;<html:a href="mailto:brian@gramps-project.org">brian@gramps-project.org</html:a>&gt;
<author uid="acraphae" title="contributor">
Raphael Ackermann &lt;<html:a href="mailto:raphael.ackermann@gmail.com">raphael.ackermann@gmail.com</html:a>&gt;
</author>
<author uid="dallingham" title="author">
Don Allingham &lt;<html:a href="mailto:don@gramps-project.org">don@gramps-project.org</html:a>&gt;
</author>
<author uid="dpeterso" title="author">
Donald A. Peterson &lt;<html:a href="mailto:"></html:a>&gt;
</author>
<author uid="dsblank" title="author">
Doug Blank &lt;<html:a href="mailto:doug.blank@gmail.com">doug.blank@gmail.com</html:a>&gt;
</author>
<author uid="eerot" title="contributor">
Eero Tamminen &lt;<html:a href="mailto:eerot@users.sourceforge.net">eerot@users.sourceforge.net</html:a>&gt;
</author>
<author uid="erikdrgm" title="contributor">
Erik De Richter &lt;<html:a href="mailto:erikdrgm@users.sourceforge.net">erikdrgm@users.sourceforge.net</html:a>&gt;
<author uid="ander882" title="contributor">
Craig J. Anderson &lt;<html:a href="mailto:ander882@hotmail.com">ander882@hotmail.com</html:a>&gt;
</author>
<author uid="espenbe" title="contributor">
Espen Berg &lt;<html:a href="mailto:espenbe@gmail.com">espenbe@gmail.com</html:a>&gt;
</author>
<author uid="gburto01" title="contributor">
Gary Burton &lt;<html:a href="mailto:gary.burton@zen.co.uk">gary.burton@zen.co.uk</html:a>&gt;
<author uid="keesb" title="contributor">
Kees Bakker &lt;<html:a href="mailto:kees.bakker@xs4all.nl">kees.bakker@xs4all.nl</html:a>&gt;
</author>
<author uid="betula" title="contributor">
Stefan Bjork &lt;<html:a href="mailto:betula@users.sourceforge.net">betula@users.sourceforge.net</html:a>&gt;
</author>
<author uid="dsblank" title="author">
Doug Blank &lt;<html:a href="mailto:doug.blank@gmail.com">doug.blank@gmail.com</html:a>&gt;
</author>
<author uid="gbritton" title="contributor">
Gerald Britton &lt;<html:a href="mailto:gerald.britton@gmail.com">gerald.britton@gmail.com</html:a>&gt;
</author>
<author uid="jgsack" title="contributor">
James G Sack &lt;<html:a href="mailto:jgsack@san.rr.com">jgsack@san.rr.com</html:a>&gt;
<author uid="gburto01" title="contributor">
Gary Burton &lt;<html:a href="mailto:gary.burton@zen.co.uk">gary.burton@zen.co.uk</html:a>&gt;
</author>
<author uid="has_no_svn_access" title="contributor">
Janne Kovesjärvi &lt;<html:a href="mailto:janne.kovesjarvi@gmail.com">janne.kovesjarvi@gmail.com</html:a>&gt;
</author>
<author uid="has_no_svn_access" title="contributor">
Jason Simanek &lt;<html:a href="mailto:jsimanek@gmail.com">jsimanek@gmail.com</html:a>&gt;
</author>
<author uid="romjerome" title="contributor">
Jérôme Rapinat &lt;<html:a href="mailto:romjerome@yahoo.fr">romjerome@yahoo.fr</html:a>&gt;
<author uid="s_charette" title="contributor">
Stéphane Charette &lt;<html:a href="mailto:stephanecharette@gmail.com">stephanecharette@gmail.com</html:a>&gt;
</author>
<author uid="jcreus" title="contributor">
Joan Creus &lt;<html:a href="mailto:joan.creus@gmail.com">joan.creus@gmail.com</html:a>&gt;
</author>
<author uid="josip" title="contributor">
Josip Pisoj &lt;<html:a href="mailto:josip@pisoj.com">josip@pisoj.com</html:a>&gt;
</author>
<author uid="jsanchez" title="contributor">
Julio Sánchez &lt;<html:a href="mailto:julio.sanchez@gmail.com">julio.sanchez@gmail.com</html:a>&gt;
</author>
<author uid="keesb" title="contributor">
Kees Bakker &lt;<html:a href="mailto:kees.bakker@xs4all.nl">kees.bakker@xs4all.nl</html:a>&gt;
</author>
<author uid="kdorichev" title="contributor">
Konstantin Dorichev &lt;<html:a href="mailto:kdorichev@gmail.com">kdorichev@gmail.com</html:a>&gt;
</author>
<author uid="has_no_svn_access" title="contributor">
Lubo Vasko &lt;<html:a href="mailto:pgval@inMail.sk">pgval@inMail.sk</html:a>&gt;
</author>
<author uid="ltosky" title="contributor">
Luigi Toscano &lt;<html:a href="mailto:luigi.toscano@tiscali.it">luigi.toscano@tiscali.it</html:a>&gt;
</author>
<author uid="has_no_svn_access" title="contributor">
Luiz Gonzaga dos Santos Filho &lt;<html:a href="mailto:lfilho@gmail.com">lfilho@gmail.com</html:a>&gt;
</author>
<author uid="zfoldvar" title="contributor">
Zsolt Foldvari &lt;<html:a href="mailto:zfoldvar@users.sourceforge.net">zfoldvar@users.sourceforge.net</html:a>&gt;
</author>
<author uid="borilg" title="contributor">
Boril Gourinov &lt;<html:a href="mailto:boril.gourinov@gmail.com">boril.gourinov@gmail.com</html:a>&gt;
</author>
<author uid="nick-h" title="contributor">
Nick Hall &lt;<html:a href="mailto:nick__hall@hotmail.com">nick__hall@hotmail.com</html:a>&gt;
</author>
<author uid="matlas" title="contributor">
Zdeněk Hataš &lt;<html:a href="mailto:zdenek.hatas@gmail.com">zdenek.hatas@gmail.com</html:a>&gt;
</author>
<author uid="loshawlos" title="author">
Martin Hawlisch &lt;<html:a href="mailto:martin.hawlisch@gmx.de">martin.hawlisch@gmx.de</html:a>&gt;
</author>
<author uid="robhealey1" title="author">
Rob G. Healey &lt;<html:a href="mailto:robhealey1@gmail.com">robhealey1@gmail.com</html:a>&gt;
</author>
<author uid="has_no_svn_access" title="contributor">
Łukasz Rymarczyk &lt;<html:a href="mailto:yenidai@poczta.onet.pl">yenidai@poczta.onet.pl</html:a>&gt;
Morten Bo Johansen &lt;<html:a href="mailto:mbj@spamcop.net">mbj@spamcop.net</html:a>&gt;
</author>
<author uid="has_no_svn_access" title="contributor">
Janne Kovesjärvi &lt;<html:a href="mailto:janne.kovesjarvi@gmail.com">janne.kovesjarvi@gmail.com</html:a>&gt;
</author>
<author uid="leonhaeuser" title="contributor">
Mirko Leonhäuser &lt;<html:a href="mailto:mirko@leonhaeuser.de">mirko@leonhaeuser.de</html:a>&gt;
</author>
<author uid="has_no_svn_access" title="contributor">
Morten Bo Johansen &lt;<html:a href="mailto:mbj@spamcop.net">mbj@spamcop.net</html:a>&gt;
</author>
<author uid="loshawlos" title="author">
Martin Hawlisch &lt;<html:a href="mailto:martin.hawlisch@gmx.de">martin.hawlisch@gmx.de</html:a>&gt;
Sigmund Lorentsen &lt;<html:a href="mailto:sigmund.lorentsen@tele2.no">sigmund.lorentsen@tele2.no</html:a>&gt;
</author>
<author uid="ldnp" title="contributor">
Peter Landgren &lt;<html:a href="mailto:peter.talken@telia.com">peter.talken@telia.com</html:a>&gt;
</author>
<author uid="acraphae" title="contributor">
Raphael Ackermann &lt;<html:a href="mailto:raphael.ackermann@gmail.com">raphael.ackermann@gmail.com</html:a>&gt;
<author uid="bmcage" title="author">
Benny Malengier &lt;<html:a href="mailto:benny.malengier@gramps-project.org">benny.malengier@gramps-project.org</html:a>&gt;
</author>
<author uid="hippy" title="author">
Richard Taylor &lt;<html:a href="mailto:rjt-gramps@thegrindstone.me.uk">rjt-gramps@thegrindstone.me.uk</html:a>&gt;
<author uid="pez4brian" title="author">
Brian Matherly &lt;<html:a href="mailto:brian@gramps-project.org">brian@gramps-project.org</html:a>&gt;
</author>
<author uid="noirauds" title="contributor">
Serge Noiraud &lt;<html:a href="mailto:Serge.Noiraud@free.fr">Serge.Noiraud@free.fr</html:a>&gt;
</author>
<author uid="dpeterso" title="author">
Donald A. Peterson &lt;<html:a href="mailto:"></html:a>&gt;
</author>
<author uid="josip" title="contributor">
Josip Pisoj &lt;<html:a href="mailto:josip@pisoj.com">josip@pisoj.com</html:a>&gt;
</author>
<author uid="romjerome" title="contributor">
Jérôme Rapinat &lt;<html:a href="mailto:romjerome@yahoo.fr">romjerome@yahoo.fr</html:a>&gt;
</author>
<author uid="erikdrgm" title="contributor">
Erik De Richter &lt;<html:a href="mailto:erikdrgm@users.sourceforge.net">erikdrgm@users.sourceforge.net</html:a>&gt;
</author>
<author uid="rshura" title="author">
Alex Roitman &lt;<html:a href="mailto:shura@gramps-project.org">shura@gramps-project.org</html:a>&gt;
</author>
<author uid="has_no_svn_access" title="contributor">
Sigmund Lorentsen &lt;<html:a href="mailto:sigmund.lorentsen@tele2.no">sigmund.lorentsen@tele2.no</html:a>&gt;
Łukasz Rymarczyk &lt;<html:a href="mailto:yenidai@poczta.onet.pl">yenidai@poczta.onet.pl</html:a>&gt;
</author>
<author uid="betula" title="contributor">
Stefan Bjork &lt;<html:a href="mailto:betula@users.sourceforge.net">betula@users.sourceforge.net</html:a>&gt;
<author uid="jgsack" title="contributor">
James G Sack &lt;<html:a href="mailto:jgsack@san.rr.com">jgsack@san.rr.com</html:a>&gt;
</author>
<author uid="s_charette" title="contributor">
Stéphane Charette &lt;<html:a href="mailto:stephanecharette@gmail.com">stephanecharette@gmail.com</html:a>&gt;
<author uid="jsanchez" title="contributor">
Julio Sánchez &lt;<html:a href="mailto:julio.sanchez@gmail.com">julio.sanchez@gmail.com</html:a>&gt;
</author>
<author uid="simanek" title="contributor">
Jason Simanek &lt;<html:a href="mailto:jsimanek@gmail.com">jsimanek@gmail.com</html:a>&gt;
</author>
<author uid="asleinius" title="contributor">
Arturas Sleinius &lt;<html:a href="mailto:asleinius@users.sourceforge.net">asleinius@users.sourceforge.net</html:a>&gt;
</author>
<author uid="eerot" title="contributor">
Eero Tamminen &lt;<html:a href="mailto:eerot@users.sourceforge.net">eerot@users.sourceforge.net</html:a>&gt;
</author>
<author uid="hippy" title="author">
Richard Taylor &lt;<html:a href="mailto:rjt-gramps@thegrindstone.me.uk">rjt-gramps@thegrindstone.me.uk</html:a>&gt;
</author>
<author uid="ltosky" title="contributor">
Luigi Toscano &lt;<html:a href="mailto:luigi.toscano@tiscali.it">luigi.toscano@tiscali.it</html:a>&gt;
</author>
<author uid="has_no_svn_access" title="contributor">
Lubo Vasko &lt;<html:a href="mailto:pgval@inMail.sk">pgval@inMail.sk</html:a>&gt;
</author>
<author uid="twaugh" title="author">
Tim Waugh &lt;<html:a href="mailto:twaugh@redhat.com">twaugh@redhat.com</html:a>&gt;
</author>
<author uid="matlas" title="contributor">
Zdeněk Hataš &lt;<html:a href="mailto:zdenek.hatas@gmail.com">zdenek.hatas@gmail.com</html:a>&gt;
</author>
<author uid="robhealey1" title="author">
Rob G. Healey &lt;<html:a href="mailto:robhealey1@gmail.com">robhealey1@gmail.com</html:a>&gt;
</author>
<author uid="zfoldvar" title="contributor">
Zsolt Foldvari &lt;<html:a href="mailto:zfoldvar@users.sourceforge.net">zfoldvar@users.sourceforge.net</html:a>&gt;
</author>
</authors>
+1 -1
View File
@@ -20,7 +20,7 @@
<_tip number="10"><b>The Family View</b><br/>The Family View is used to display a typical family unit as two parents and their children.</_tip>
<_tip number="11"><b>Changing the Active Person</b><br/>Changing the Active Person in views is easy. In the Relationship view juct click on anyone. In the Ancestry View doubleclick on the person or right click to select any of their spouses, siblings, children or parents.</_tip>
<_tip number="11"><b>Changing the Active Person</b><br/>Changing the Active Person in views is easy. In the Relationship view just click on anyone. In the Ancestry View doubleclick on the person or right click to select any of their spouses, siblings, children or parents.</_tip>
<_tip number="12"><b>Who Was Born When?</b><br/>Under &quot;Tools &gt; Analysis and exploration &gt; Compare Individual Events...&quot; you can compare the data of individuals in your database. This is useful, say, if you wish to list the birth dates of everyone in your database. You can use a custom filter to narrow the results.</_tip>
+12 -5
View File
@@ -193,6 +193,9 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback):
# 3. Special signal for change in home person
__signals__['home-person-changed'] = None
# 4. Signal for change in person group name, parameters are
__signals__['person-groupname-rebuild'] = (unicode, unicode)
def __init__(self):
"""Create a new GrampsDB."""
@@ -1265,13 +1268,17 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback):
if not self.readonly:
# Start transaction
with BSDDBTxn(self.env, self.name_group) as txn:
name = str(name)
data = txn.get(name)
sname = str(name)
data = txn.get(sname)
if data is not None:
txn.delete(name)
txn.delete(sname)
if group is not None:
txn.put(name, group)
self.emit('person-rebuild')
txn.put(sname, group)
if group == None:
grouppar = u''
else:
grouppar = group
self.emit('person-groupname-rebuild', (name, grouppar))
def sort_surname_list(self):
self.surname_list.sort(key=locale.strxfrm)
+7 -1
View File
@@ -55,7 +55,13 @@ class Name(SecondaryObject, PrivacyBase, SourceBase, NoteBase, DateBase):
FN = 4 # first name
def __init__(self, source=None, data=None):
"""Create a new Name instance, copying from the source if provided."""
"""Create a new Name instance, copying from the source if provided.
We should connect here to 'person-groupname-rebuild' and do something
correct when first parameter is the name, and second parameter is
different from the group here. However, that would be complicated and
no real errors that cannot be ammended can be done if group is
saved differently.
"""
PrivacyBase.__init__(self, source)
SourceBase.__init__(self, source)
NoteBase.__init__(self, source)
+1 -1
View File
@@ -68,7 +68,7 @@ class Gramplet(object):
Connect the given method to the active-changed signal for the
navigation type requested.
"""
self.uistate.register(nav_type, self.nav_group)
self.uistate.register(self.dbstate, nav_type, self.nav_group)
history = self.uistate.get_history(nav_type, self.nav_group)
self.connect(history, "active-changed", method)
+7
View File
@@ -10,10 +10,12 @@
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox2">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">8</property>
<child>
<object class="GtkVBox" id="vbox2">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="place_title">
<property name="visible">True</property>
@@ -242,10 +244,12 @@
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox3">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">8</property>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="merge_title">
<property name="visible">True</property>
@@ -447,6 +451,7 @@
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox4">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkTable" id="table8">
<property name="visible">True</property>
@@ -956,11 +961,13 @@
<child internal-child="vbox">
<object class="GtkVBox" id="vbox4">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">8</property>
<child>
<object class="GtkVBox" id="vbox5">
<property name="visible">True</property>
<property name="border_width">12</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkLabel" id="people_title">
+1 -2
View File
@@ -8,10 +8,10 @@
<property name="default_width">500</property>
<property name="default_height">300</property>
<property name="type_hint">dialog</property>
<signal name="delete_event" handler="on_scratch_pad_delete_event"/>
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow86">
<property name="visible">True</property>
@@ -58,7 +58,6 @@
<property name="can_default">True</property>
<property name="receives_default">False</property>
<property name="use_underline">True</property>
<signal name="clicked" handler="on_clear_all_clicked"/>
</object>
<packing>
<property name="expand">False</property>
+6
View File
@@ -10,9 +10,11 @@
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="title">
<property name="visible">True</property>
@@ -53,6 +55,7 @@
<child>
<object class="GtkVButtonBox" id="vbuttonbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">10</property>
<property name="layout_style">start</property>
<child>
@@ -185,9 +188,11 @@
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox2">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkVBox" id="vbox2">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="title1">
<property name="visible">True</property>
@@ -277,6 +282,7 @@
<object class="GtkVBox" id="vbox3">
<property name="visible">True</property>
<property name="border_width">12</property>
<property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkLabel" id="pname">
+34 -26
View File
@@ -2,7 +2,7 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2006 Donald N. Allingham
# Copyright (C) 2009 Gary Burton
# Copyright (C) 2009-2010 Gary Burton
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -38,6 +38,8 @@ import urlparse
import gtk
import pango
import os
import sys
import urllib
import gobject
#-------------------------------------------------------------------------
@@ -55,7 +57,7 @@ import Errors
import gen.mime
from DdTargets import DdTargets
from buttontab import ButtonTab
import constfunc
#-------------------------------------------------------------------------
#
#
@@ -200,7 +202,6 @@ class GalleryTab(ButtonTab, DbGUIElement):
self.iconlist.set_margin(12)
self.iconlist.set_spacing(24)
self.iconlist.set_reorderable(True)
self.iconlist.set_item_width(item_width)
self.iconlist.set_selection_mode(gtk.SELECTION_SINGLE)
# connect the signals
@@ -366,7 +367,7 @@ class GalleryTab(ButtonTab, DbGUIElement):
DdTargets.MEDIAOBJ.target()]
self.iconlist.enable_model_drag_dest(dnd_types,
gtk.gdk.ACTION_COPY)
gtk.gdk.ACTION_MOVE|gtk.gdk.ACTION_COPY)
self.iconlist.enable_model_drag_source(gtk.gdk.BUTTON1_MASK,
[self._DND_TYPE.target()],
gtk.gdk.ACTION_COPY)
@@ -454,28 +455,35 @@ class GalleryTab(ButtonTab, DbGUIElement):
elif self._DND_EXTRA and mytype == self._DND_EXTRA.drag_type:
self.handle_extra_type(mytype, obj)
except pickle.UnpicklingError:
d = Utils.fix_encoding(sel_data.data.replace('\0',' ').strip())
protocol, site, mfile, j, k, l = urlparse.urlparse(d)
if protocol == "file":
name = Utils.fix_encoding(mfile)
mime = gen.mime.get_type(name)
if not gen.mime.is_valid_type(mime):
return
photo = gen.lib.MediaObject()
photo.set_path(name)
photo.set_mime_type(mime)
basename = os.path.basename(name)
(root, ext) = os.path.splitext(basename)
photo.set_description(root)
trans = self.dbstate.db.transaction_begin()
self.dbstate.db.add_object(photo, trans)
oref = gen.lib.MediaRef()
oref.set_reference_handle(photo.get_handle())
self.get_data().append(oref)
self.changed = True
# self.dataobj.add_media_reference(oref)
self.dbstate.db.transaction_commit(trans,
_("Drag Media Object"))
#modern file managers provide URI_LIST. For Windows split sel_data.data
if constfunc.win():
files = sel_data.data.split('\n')
else:
files = sel_data.get_uris()
for file in files:
d = Utils.fix_encoding(file.replace('\0',' ').strip())
protocol, site, mfile, j, k, l = urlparse.urlparse(d)
if protocol == "file":
name = Utils.fix_encoding(mfile)
name = unicode(urllib.url2pathname(
name.encode(sys.getfilesystemencoding())))
mime = gen.mime.get_type(name)
if not gen.mime.is_valid_type(mime):
return
photo = gen.lib.MediaObject()
photo.set_path(name)
photo.set_mime_type(mime)
basename = os.path.basename(name)
(root, ext) = os.path.splitext(basename)
photo.set_description(root)
trans = self.dbstate.db.transaction_begin()
self.dbstate.db.add_object(photo, trans)
oref = gen.lib.MediaRef()
oref.set_reference_handle(photo.get_handle())
self.get_data().append(oref)
self.changed = True
self.dbstate.db.transaction_commit(trans,
_("Drag Media Object"))
self.rebuild()
def handle_extra_type(self, objtype, obj):
+1 -1
View File
@@ -166,7 +166,7 @@ class EditChildRef(EditSecondary):
def edit_child(self, obj,event):
if button_activated(event, _LEFT_BUTTON):
from _EditPerson import EditPerson
from editperson import EditPerson
handle = self.obj.ref
try:
person = self.db.get_person_from_handle(handle)
+53 -35
View File
@@ -32,7 +32,6 @@ Manages the main window and the pluggable views
#
#-------------------------------------------------------------------------
import os
from gen.ggettext import gettext as _
from cStringIO import StringIO
from collections import defaultdict
@@ -763,8 +762,6 @@ class ViewManager(CLIManager):
"""
try:
GrampsPreferences(self.uistate, self.dbstate)
self._key = self.uistate.connect('nameformat-changed',
self.active_page.build_tree)
except Errors.WindowActiveError:
return
@@ -884,7 +881,13 @@ class ViewManager(CLIManager):
self.pages.append([])
nrpage = 0
for pdata, page_def in cat_views:
page = page_def(self.dbstate, self.uistate)
try:
page = page_def(self.dbstate, self.uistate)
except:
import traceback
LOG.warn("View '%s' failed to load." % pdata.id)
traceback.print_exc()
continue
# Category is (string, trans):
page.set_category(pdata.category)
page.set_ident(page.get_category() + '_' + pdata.id)
@@ -960,12 +963,23 @@ class ViewManager(CLIManager):
uitoolitems)
#set view cat to last used in this category
self.notebook_cat[-1].set_current_page(default_cat_views[indexcat])
if self.views:
self.active_page = self.pages[current_cat][current_cat_view]
self.buttons[current_cat].set_active(True)
self.active_page.set_active()
self.notebook.set_current_page(current_cat)
self.notebook_cat[current_cat].set_current_page(current_cat_view)
self._key = self.uistate.connect('nameformat-changed',
self.active_page.build_tree)
else:
#not one single view loaded
WarningDialog(
_("No views loaded"),
_("No view plugins are loaded. Go to Help->Plugin "
"Manager, and make sure some plugins of type 'View' are "
"enabled. Then restart Gramps"))
self.active_page = self.pages[current_cat][current_cat_view]
self.buttons[current_cat].set_active(True)
self.active_page.set_active()
self.notebook.set_current_page(current_cat)
self.notebook_cat[current_cat].set_current_page(current_cat_view)
def __views_to_show(self, use_last = True):
"""
@@ -1159,36 +1173,40 @@ class ViewManager(CLIManager):
:Type view_page: integer >=0 to switch to a specific page, or -1 to
switch to the active view in the category
"""
if view_page == -1:
#just show active one
view_page = self.notebook_cat[category_page].get_current_page()
if self.dbstate.open:
self.__disconnect_previous_page()
if len(self.pages) > 0:
self.active_page = self.pages[category_page][view_page]
self.active_page.set_active()
newcurpageid = self.views[category_page][view_page][0].id
config.set('preferences.last-view', newcurpageid)
olddefaults = config.get('preferences.last-views')
if len(olddefaults) != len(self.pages):
#number views changed, we cannot trust the old
olddefaults = [''] * len(self.pages)
olddefaults[category_page] = newcurpageid
config.set('preferences.last-views', olddefaults)
config.save()
if self.notebook_cat:
if view_page == -1:
#just show active one
view_page = self.notebook_cat[category_page].get_current_page()
if self.dbstate.open:
self.__disconnect_previous_page()
if len(self.pages) > 0:
self.active_page = self.pages[category_page][view_page]
self.active_page.set_active()
newcurpageid = self.views[category_page][view_page][0].id
config.set('preferences.last-view', newcurpageid)
olddefaults = config.get('preferences.last-views')
if len(olddefaults) != len(self.pages):
#number views changed, we cannot trust the old
olddefaults = [''] * len(self.pages)
olddefaults[category_page] = newcurpageid
config.set('preferences.last-views', olddefaults)
config.save()
self.__connect_active_page(category_page, view_page)
self.__connect_active_page(category_page, view_page)
self.uimanager.ensure_update()
self.uimanager.ensure_update()
while gtk.events_pending():
gtk.main_iteration()
while gtk.events_pending():
gtk.main_iteration()
self.active_page.change_page()
if self._key:
self.uistate.disconnect(self._key)
self._key = self.uistate.connect(
'nameformat-changed', self.active_page.build_tree)
self.active_page.change_page()
if self._key:
self.uistate.disconnect(self._key)
self._key = self.uistate.connect(
'nameformat-changed', self.active_page.build_tree)
else:
#no views loaded
pass
def import_data(self, obj):
"""
+1 -1
View File
@@ -708,7 +708,7 @@ class ListView(NavigationView):
else:
self.dirty = True
def object_build(self):
def object_build(self, *args):
"""
Called when the tree must be rebuilt and bookmarks redrawn.
"""
+1 -1
View File
@@ -92,7 +92,7 @@ class NavigationView(PageView):
self.nav_group = nav_group
self.mru_active = DISABLED
self.uistate.register(self.navigation_type(), self.nav_group)
self.uistate.register(state, self.navigation_type(), self.nav_group)
def navigation_type(self):
+3 -2
View File
@@ -435,13 +435,14 @@ class PageView(DbGUIElement):
if not self.__configure_content:
self.__configure_content = self._get_configure_page_funcs()
title = _("Configure %(cat)s - %(view)s") % \
{'cat': self.get_category(), 'view': self.get_title()}
{'cat': self.get_translated_category(),
'view': self.get_title()}
try:
ViewConfigureDialog(self.uistate, self.dbstate,
self.__configure_content,
self, self._config, dialogtitle=title,
ident=_("%(cat)s - %(view)s") %
{'cat': self.get_category(),
{'cat': self.get_translated_category(),
'view': self.get_title()})
except Errors.WindowActiveError:
return
+14 -5
View File
@@ -516,8 +516,8 @@ class FlatBaseModel(gtk.GenericTreeModel):
# use cursor as a context manager
with self.gen_cursor() as cursor:
#loop over database and store the sort field, and the handle
return sorted( (conv_unicode_tosrtkey_ongtk(self.sort_func(data)),
key) for key, data in cursor )
return sorted((map(conv_unicode_tosrtkey_ongtk,
self.sort_func(data)), key) for key, data in cursor)
def _rebuild_search(self, ignore=None):
""" function called when view must be build, given a search text
@@ -584,7 +584,8 @@ class FlatBaseModel(gtk.GenericTreeModel):
Row is only added if search/filter data is such that it must be shown
"""
data = self.map(handle)
insert_val = (conv_unicode_tosrtkey_ongtk(self.sort_func(data)), handle)
insert_val = (map(conv_unicode_tosrtkey_ongtk, self.sort_func(data)),
handle)
if not self.search or \
(self.search and self.search.match(handle, self.db)):
#row needs to be added to the model
@@ -602,7 +603,8 @@ class FlatBaseModel(gtk.GenericTreeModel):
"""
self.clear_cache(handle)
data = self.map(handle)
delete_val = (conv_unicode_tosrtkey_ongtk(self.sort_func(data)), handle)
delete_val = (map(conv_unicode_tosrtkey_ongtk, self.sort_func(data)),
handle)
delete_path = self.node_map.delete(delete_val)
#delete_path is an integer from 0 to n-1
if delete_path is not None:
@@ -614,7 +616,7 @@ class FlatBaseModel(gtk.GenericTreeModel):
"""
self.clear_cache(handle)
oldsortkey = self.node_map.get_sortkey(handle)
newsortkey = conv_unicode_tosrtkey_ongtk(self.sort_func(self.map(
newsortkey = map(conv_unicode_tosrtkey_ongtk, self.sort_func(self.map(
handle)))
if oldsortkey is None or oldsortkey != newsortkey:
#or the changed object is not present in the view due to filtering
@@ -627,6 +629,13 @@ class FlatBaseModel(gtk.GenericTreeModel):
node = self.get_iter(path)
self.row_changed(path, node)
def handle2path(self, handle):
"""
Obtain from a handle, a path.
Part of common api with flat/treebasemodel
"""
return self.on_get_path(handle)
def on_get_flags(self):
"""
Returns the GtkTreeModelFlags for this particular type of model
+1 -1
View File
@@ -178,7 +178,7 @@ class PeopleBaseModel(object):
def sort_name(self, data):
n = Name()
n.unserialize(data[COLUMN_NAME])
return name_displayer.sort_string(n)
return (n.get_group_name(), n.get_first_name())
def column_name(self, data):
handle = data[0]
+15 -7
View File
@@ -85,7 +85,7 @@ class Node(object):
def __init__(self, ref, parent, sortkey, handle):
self.name = sortkey
if sortkey:
self.sortkey = conv_unicode_tosrtkey_ongtk(sortkey)
self.sortkey = map(conv_unicode_tosrtkey_ongtk, sortkey)
else:
self.sortkey = None
self.ref = ref
@@ -228,7 +228,7 @@ class TreeBaseModel(gtk.GenericTreeModel):
the hierarchy. Each entry is a node object.
handle2node A dictionary of gramps handles. Each entry is a node object.
nodemap A NodeMap, mapping id's of the nodes to the node objects. Node
refer to other notes via id's in a linked list form.
refer to other nodes via id's in a linked list form.
The model obtains data from database as needed and holds a cache of most
recently used data.
@@ -577,8 +577,9 @@ class TreeBaseModel(gtk.GenericTreeModel):
path = self.on_get_path(child_node)
node = self.get_iter(path)
self.row_inserted(path, node)
self.__total += 1
self.__displayed += 1
if handle:
self.__total += 1
self.__displayed += 1
if handle:
self.handle2node[handle] = child_node
@@ -607,16 +608,16 @@ class TreeBaseModel(gtk.GenericTreeModel):
node.set_handle(None)
self.__displayed -= 1
self.__total -= 1
else:
elif node.parent: # don't remove the hidden root node
path = self.on_get_path(node)
self.nodemap.node(node.parent).remove_child(node, self.nodemap)
del self.tree[node.ref]
if node.handle is not None:
del self.handle2node[node.handle]
self.__displayed -= 1
self.__total -= 1
self.nodemap.del_node(node)
del node
self.__displayed -= 1
self.__total -= 1
# emit row_deleted signal
self.row_deleted(path)
@@ -724,6 +725,13 @@ class TreeBaseModel(gtk.GenericTreeModel):
"""
return self.handle2node.get(handle)
def handle2path(self, handle):
"""
Obtain from a handle, a path.
Part of common api with flat/treebasemodel
"""
return self.on_get_path(self.get_node(handle))
# The following implement the public interface of gtk.GenericTreeModel
def on_get_flags(self):
+1
View File
@@ -5,6 +5,7 @@ SUBDIRS =
pkgdatadir = $(datadir)/@PACKAGE@/images/16x16
dist_pkgdata_DATA = \
geo-fixed-zoom.png \
gramps-address.png \
gramps-attribute.png \
gramps-bookmark-delete.png \
Binary file not shown.

After

Width:  |  Height:  |  Size: 816 B

+3
View File
@@ -19,10 +19,12 @@ dist_pkgdata_DATA = \
gramps-bookmark-edit.png \
gramps-bookmark-new.png \
gramps-bookmark.png \
gramps-config.png \
gramps-date-edit.png \
gramps-date.png \
gramps-event.png \
gramps-family.png \
gramps-fanchart.png \
gramps-font-bgcolor.png \
gramps-font-color.png \
gramps-font.png \
@@ -50,6 +52,7 @@ dist_pkgdata_DATA = \
gramps-tree-list.png \
gramps-tree-select.png \
gramps-unlock.png \
gramps-view.png \
gramps-viewmedia.png \
gramps-zoom-best-fit.png \
gramps-zoom-fit-width.png \
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 895 B

-1
View File
@@ -5,7 +5,6 @@ SUBDIRS =
pkgdatadir = $(datadir)/@PACKAGE@/images/scalable
dist_pkgdata_DATA = \
geo-place-add.svg
geo-fixed-zoom.svg \
geo-free-zoom.svg \
geo-place-add.svg \
+2 -1
View File
@@ -5,7 +5,8 @@
pkgdatadir = $(datadir)/@PACKAGE@/mapstraction
dist_pkgdata_DATA = \
mapstraction.js
mapstraction.js \
crosshairs.png
+20 -7
View File
@@ -176,7 +176,8 @@ def _get_subject(options, dbase):
else:
mother_name = _("unknown mother")
name = _("%s and %s (%s)") % (father_name, mother_name, family_id)
name = _("%(father)s and %(mother)s (%(id)s)") % {
'father' : father_name, 'mother' : mother_name, 'id' : family_id }
return name
return _("Not Applicable")
@@ -898,12 +899,24 @@ class BookReportSelector(ManagedWindow.ManagedWindow):
item.get_name(),
item.get_translated_name(),
self.track)
response = item_dialog.window.run()
if response == gtk.RESPONSE_OK:
subject = _get_subject(option_class, self.db)
self.book_model.model.set_value(the_iter, 2, subject)
self.book.set_item(row, item)
item_dialog.close()
while True:
response = item_dialog.window.run()
if response == gtk.RESPONSE_OK:
# dialog will be closed by connect, now continue work while
# rest of dialog is unresponsive, release when finished
subject = _get_subject(option_class, self.db)
self.book_model.model.set_value(the_iter, 2, subject)
self.book.set_item(row, item)
item_dialog.close()
break
elif response == gtk.RESPONSE_CANCEL:
item_dialog.close()
break
elif response == gtk.RESPONSE_DELETE_EVENT:
#just stop, in ManagedWindow, delete-event is already coupled to
#correct action.
break
def book_button_press(self, obj, event):
"""
+3 -3
View File
@@ -210,9 +210,9 @@ def _find_records(db, filter, callname):
father = db.get_person_from_handle(father_handle)
mother = db.get_person_from_handle(mother_handle)
name = _("%s and %s") % (
_person_get_display_name(father, callname),
_person_get_display_name(mother, callname))
name = _("%(father)s and %(mother)s") % {
'father' : _person_get_display_name(father, callname),
'mother' : _person_get_display_name(mother, callname) }
_record(None, family_mostchildren,
len(family.get_child_ref_list()),
-37
View File
@@ -1,37 +0,0 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2008 - 2009 Douglas S. Blank <doug.blank@gmail.com>
# Copyright (C) 2009 B. Malengier <benny.malengier@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id$
#
register(EXPORT,
id = "export_django",
name = _('Django Export'),
description = _('Django is a web framework working on a '
'configured database'),
version = '1.0',
gramps_target_version= '3.2',
status = UNSTABLE,
export_options_title = _('Django options'),
export_options = 'NoFilenameOptions',
export_function = 'export_all',
extension = "django",
fname = "ExportDjango.py",
)
-193
View File
@@ -1,193 +0,0 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2008 - 2009 Douglas S. Blank <doug.blank@gmail.com>
# Copyright (C) 2009 B. Malengier <benny.malengier@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id$
#
"""
Export to the Django Models on the configured database backend
"""
#------------------------------------------------------------------------
#
# Standard Python Modules
#
#------------------------------------------------------------------------
import sys
import os
import time
#------------------------------------------------------------------------
#
# Set up logging
#
#------------------------------------------------------------------------
import logging
LOG = logging.getLogger(".ExportDjango")
#------------------------------------------------------------------------
#
# GRAMPS modules
#
#------------------------------------------------------------------------
import ExportOptions
from Utils import create_id, probably_alive
import const
import gen.lib
from TransUtils import get_addon_translator
translator = get_addon_translator(__file__)
_ = translator.gettext
ngettext = translator.ngettext
from django.conf import settings
import web.settings as default_settings
try:
settings.configure(default_settings)
except RuntimeError:
# already configured; ignore
pass
from web.libdjango import DjangoInterface
def export_all(database, filename, option_box=None, callback=None):
if not callable(callback):
callback = lambda (percent): None # dummy
start = time.time()
total = (database.get_number_of_notes() +
database.get_number_of_people() +
database.get_number_of_events() +
database.get_number_of_families() +
database.get_number_of_repositories() +
database.get_number_of_places() +
database.get_number_of_media_objects() +
database.get_number_of_sources()) * 2 # steps
count = 0.0
dji = DjangoInterface()
dji.clear_tables("primary", "secondary", "ref")
for step in [0, 1]:
LOG.debug("Exporting Step %d..." % (step + 1))
# ---------------------------------
# Person
# ---------------------------------
for person_handle in database.person_map.keys():
data = database.person_map[person_handle]
if step == 0:
dji.add_person(data)
elif step == 1:
djperson = dji.add_person_detail(data)
djperson.probably_alive = not bool(djperson.death)
djperson.save()
count += 1
callback(100 * count/total)
# ---------------------------------
# Notes
# ---------------------------------
for note_handle in database.note_map.keys():
data = database.note_map[note_handle]
if step == 0:
dji.add_note(data)
count += 1
callback(100 * count/total)
# ---------------------------------
# Family
# ---------------------------------
for family_handle in database.family_map.keys():
data = database.family_map[family_handle]
if step == 0:
dji.add_family(data)
elif step == 1:
dji.add_family_detail(data)
count += 1
callback(100 * count/total)
# ---------------------------------
# Source
# ---------------------------------
for source_handle in database.source_map.keys():
data = database.source_map[source_handle]
if step == 0:
dji.add_source(data)
elif step == 1:
dji.add_source_detail(data)
count += 1
callback(100 * count/total)
# ---------------------------------
# Event
# ---------------------------------
for event_handle in database.event_map.keys():
data = database.event_map[event_handle]
if step == 0:
dji.add_event(data)
elif step == 1:
dji.add_event_detail(data)
count += 1
callback(100 * count/total)
# ---------------------------------
# Repository
# ---------------------------------
for repository_handle in database.repository_map.keys():
data = database.repository_map[repository_handle]
if step == 0:
dji.add_repository(data)
elif step == 1:
dji.add_repository_detail(data)
count += 1
callback(100 * count/total)
# ---------------------------------
# Place
# ---------------------------------
for place_handle in database.place_map.keys():
data = database.place_map[place_handle]
if step == 0:
dji.add_place(data)
elif step == 1:
dji.add_place_detail(data)
count += 1
callback(100 * count/total)
# ---------------------------------
# Media
# ---------------------------------
for media_handle in database.media_map.keys():
data = database.media_map[media_handle]
if step == 0:
dji.add_media(data)
elif step == 1:
dji.add_media_detail(data)
count += 1
callback(100 * count/total)
total_time = time.time() - start
msg = ngettext('Export Complete: %d second','Export Complete: %d seconds', total_time ) % total_time
LOG.debug(msg)
return True
class NoFilenameOptions(ExportOptions.WriterOptionBox):
no_fileselect = True
+1
View File
@@ -542,6 +542,7 @@ class FanChartWidget(gtk.Widget):
text, person, parents, child = self.data[generation][selected]
if person and self.context_popup_callback:
self.context_popup_callback(widget, event, person.handle)
return True
self.queue_draw()
return True
+13 -3
View File
@@ -35,9 +35,19 @@ class FAQGramplet(Gramplet):
def init(self):
self.set_use_markup(True)
self.clear_text()
self.render_text("Draft of a <a wiki='FAQ'>Frequently Asked Questions</a> Gramplet\n\n")
self.render_text(" 1. <a href='http://bugs.gramps-project.org/'>Test 1</a>\n")
self.render_text(" 2. <a href='http://gramps-project.org//'>Test 2</a>\n")
self.render_text(_("<a wiki='Gramps_3.2_Wiki_Manual_-_FAQ'>Frequently Asked Questions</a> (need connection to internet)\n\n"))
self.render_text(_(" 1. <a wiki='Gramps_3.2_Wiki_Manual_-_FAQ#How_do_I_change_the_order_of_spouses.3F'>How do I change the order of spouses?</a>\n"))
self.render_text(_(" 2. <a wiki='Gramps_3.2_Wiki_Manual_-_FAQ#How_do_I_upgrade_GRAMPS.3F'>Is it necessary to update Gramps every time an update is released?</a>\n"))
self.render_text(_(" 3. <a wiki='Gramps_3.2_Wiki_Manual_-_FAQ#How_do_I_keep_backups.3F'>How do I make backups safely?</a>\n"))
self.render_text(_(" 4. <a wiki='Gramps_3.2_Wiki_Manual_-_Entering_and_Editing_Data:_Detailed_-_part_1#Editing_Information_About_Relationships'>How should information about marriages be entered?</a>\n"))
self.render_text(_(" 5. <a wiki='Gramps_3.2_Wiki_Manual_-_FAQ#What_is_the_difference_between_a_residence_and_an_address.3F'>What's the difference between a residence and an address?</a>\n"))
self.render_text(_(" 6. <a wiki='Gramps_3.2_Wiki_Manual_-_FAQ#How_can_I_publish_web_sites_generated_by_GRAMPS.3F'>How can I make a website with Gramps and my tree?</a>\n"))
self.render_text(_(" 7. <a href='http://old.nabble.com/German-translation-of-%22occupation%22-ts21786114.html#a21786114'>How do I record one's occupation?</a>\n"))
self.render_text(_(" 8. <a wiki='Gramps_3.2_Wiki_Manual_-_FAQ#What_do_I_do_if_I_have_found_a_bug.3F'>What do I do if I have found a bug?</a>\n"))
self.render_text(_(" 9. <a wiki='Portal:Using_GRAMPS'>Is there a manual for Gramps?</a>\n"))
self.render_text(_(" 10. <a wiki='Category:Tutorials'>Are there tutorials available?</a>\n"))
self.render_text(_(" 11. <a wiki='Category:How_do_I...'>How do I ...?</a>\n"))
self.render_text(_(" 12. <a wiki='How_you_can_help'>How can I help with Gramps?</a>\n"))
def post_init(self):
self.disconnect("active-changed")
+1 -1
View File
@@ -16,7 +16,7 @@ pkgdata_PYTHON = \
GivenNameGramplet.py \
gramplet.gpr.py \
PedigreeGramplet.py \
PluginManagerGramplet.py\
PluginManagerGramplet.py\
QuickViewGramplet.py \
RelativeGramplet.py \
SessionLogGramplet.py \
+1 -1
View File
@@ -81,6 +81,6 @@ class LogGramplet(Gramplet):
if mother_handle:
mother = self.dbstate.db.get_person_from_handle(mother_handle)
mother_name = name_displayer.display(mother)
name = _("%s and %s") % (mother_name, father_name)
name = _("%(mother)s and %(father)s") % { 'mother' : mother_name, 'father' : father_name }
self.link(name, ltype, handle)
self.append_text("\n")
+20
View File
@@ -28,6 +28,7 @@
register(GRAMPLET,
id="Age on Date Gramplet",
name=_("Age on Date Gramplet"),
description = _("Gramplet showing ages of living people on a specific date"),
version="2.0.0",
gramps_target_version="3.2",
status = STABLE,
@@ -40,6 +41,7 @@ register(GRAMPLET,
register(GRAMPLET,
id = "Age Stats Gramplet",
name = _("Age Stats Gramplet"),
description = _("Gramplet showing graphs of various ages"),
status = STABLE,
fname="AgeStats.py",
height=100,
@@ -55,6 +57,7 @@ register(GRAMPLET,
register(GRAMPLET,
id="Attributes Gramplet",
name=_("Attributes Gramplet"),
description = _("Gramplet showing active person's attributes"),
status = STABLE,
fname="AttributesGramplet.py",
height=150,
@@ -70,6 +73,7 @@ register(GRAMPLET,
register(GRAMPLET,
id="Calendar Gramplet",
name=_("Calendar Gramplet"),
description = _("Gramplet showing calendar and events on specific dates in history"),
status = STABLE,
fname="CalendarGramplet.py",
height=200,
@@ -82,6 +86,7 @@ register(GRAMPLET,
register(GRAMPLET,
id = "Descendant Gramplet",
name=_("Descendant Gramplet"),
description = _("Gramplet showing active person's descendants"),
status = STABLE,
fname="DescendGramplet.py",
height=100,
@@ -97,6 +102,7 @@ register(GRAMPLET,
register(GRAMPLET,
id= "Fan Chart Gramplet",
name=_("Fan Chart Gramplet"),
description = _("Gramplet showing active person's direct ancestors as a fanchart"),
status = STABLE,
fname="FanChartGramplet.py",
height=430,
@@ -112,6 +118,7 @@ register(GRAMPLET,
register(GRAMPLET,
id="FAQ Gramplet",
name=_("FAQ Gramplet"),
description = _("Gramplet showing frequently asked questions"),
status = STABLE,
fname="FaqGramplet.py",
height=300,
@@ -124,6 +131,7 @@ register(GRAMPLET,
register(GRAMPLET,
id= "Given Name Cloud Gramplet",
name=_("Given Name Cloud Gramplet"),
description = _("Gramplet showing all given names as a text cloud"),
status = STABLE,
fname="GivenNameGramplet.py",
height=300,
@@ -137,6 +145,7 @@ register(GRAMPLET,
register(GRAMPLET,
id="Pedigree Gramplet",
name=_("Pedigree Gramplet"),
description = _("Gramplet showing active person's ancestors"),
status = STABLE,
fname="PedigreeGramplet.py",
height=300,
@@ -152,6 +161,7 @@ register(GRAMPLET,
register(GRAMPLET,
id="Plugin Manager Gramplet",
name=_("Plugin Manager Gramplet"),
description = _("Gramplet showing available third-party plugins (addons)"),
status = STABLE,
fname="PluginManagerGramplet.py",
height=300,
@@ -165,6 +175,7 @@ register(GRAMPLET,
register(GRAMPLET,
id="Quick View Gramplet",
name=_("Quick View Gramplet"),
description = _("Gramplet showing an active item Quick View"),
status = STABLE,
fname="QuickViewGramplet.py",
height=300,
@@ -180,6 +191,7 @@ register(GRAMPLET,
register(GRAMPLET,
id="Relatives Gramplet",
name=_("Relatives Gramplet"),
description = _("Gramplet showing active person's relatives"),
status = STABLE,
fname="RelativeGramplet.py",
height=200,
@@ -194,6 +206,7 @@ register(GRAMPLET,
register(GRAMPLET,
id="Session Log Gramplet",
name=_("Session Log Gramplet"),
description = _("Gramplet showing all activity for this session"),
status = STABLE,
fname="SessionLogGramplet.py",
height=230,
@@ -207,6 +220,7 @@ register(GRAMPLET,
register(GRAMPLET,
id="Statistics Gramplet",
name=_("Statistics Gramplet"),
description = _("Gramplet showing summary data of the family tree"),
status = STABLE,
fname="StatsGramplet.py",
height=230,
@@ -220,6 +234,7 @@ register(GRAMPLET,
register(GRAMPLET,
id= "Surname Cloud Gramplet",
name=_("Surname Cloud Gramplet"),
description = _("Gramplet showing all surnames as a text cloud"),
status = STABLE,
fname="SurnameCloudGramplet.py",
height=300,
@@ -233,6 +248,7 @@ register(GRAMPLET,
register(GRAMPLET,
id="TODO Gramplet",
name=_("TODO Gramplet"),
description = _("Gramplet for generic notes"),
status = STABLE,
fname="ToDoGramplet.py",
height=300,
@@ -246,6 +262,7 @@ register(GRAMPLET,
register(GRAMPLET,
id= "Top Surnames Gramplet",
name=_("Top Surnames Gramplet"),
description = _("Gramplet showing most frequent surnames in this tree"),
status = STABLE,
fname="TopSurnamesGramplet.py",
height=230,
@@ -258,6 +275,7 @@ register(GRAMPLET,
register(GRAMPLET,
id="Welcome Gramplet",
name=_("Welcome Gramplet"),
description = _("Gramplet showing a welcome message"),
status = STABLE,
fname="WelcomeGramplet.py",
height=300,
@@ -271,6 +289,7 @@ register(GRAMPLET,
register(GRAMPLET,
id = "What's Next Gramplet",
name =_("What's Next Gramplet"),
description = _("Gramplet suggesting items to research"),
status = STABLE,
fname="WhatsNext.py",
height = 230,
@@ -280,3 +299,4 @@ register(GRAMPLET,
version="1.0.0",
gramps_target_version="3.2",
)
+2 -2
View File
@@ -330,8 +330,8 @@ class CSVParser(object):
try:
data = [[r.strip() for r in row] for row in reader]
except csv.Error, e:
ErrorDialog(_('format error: file %s, line %d: %s') %
(self.filename, reader.line_num, e))
ErrorDialog(_('format error: file %(fname)s, line %(line)d: %(zero)s') % {
'fname' : self.filename, 'line' : reader.line_num, 'zero' : e })
try:
fp.close()
except:
-35
View File
@@ -1,35 +0,0 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2008 - 2009 Douglas S. Blank <doug.blank@gmail.com>
# Copyright (C) 2009 B. Malengier <benny.malengier@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id$
#
register(IMPORT,
id = "import_django",
name = _('Django Import'),
description = _('Django is a web framework working on a '
'configured database'),
version = '1.0',
gramps_target_version = '3.2',
status = UNSTABLE,
import_function = 'import_data',
extension = "django",
fname = "ImportDjango.py",
)
-195
View File
@@ -1,195 +0,0 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2008 - 2009 Douglas S. Blank <doug.blank@gmail.com>
# Copyright (C) 2009 B. Malengier <benny.malengier@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id$
#
"""
Import from the Django dji on the configured database backend
"""
#-------------------------------------------------------------------------
#
# Standard Python Modules
#
#-------------------------------------------------------------------------
import time
import sys
import os
#------------------------------------------------------------------------
#
# Set up logging
#
#------------------------------------------------------------------------
import logging
LOG = logging.getLogger(".ImportDjango")
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
import gen.lib
from QuestionDialog import ErrorDialog
from Utils import create_id
import const
from TransUtils import get_addon_translator
translator = get_addon_translator(__file__)
_ = translator.gettext
ngettext = translator.ngettext
from django.conf import settings
import web.settings as default_settings
try:
settings.configure(default_settings)
except:
pass
from web.libdjango import DjangoInterface
#-------------------------------------------------------------------------
#
# Django Reader
#
#-------------------------------------------------------------------------
class DjangoReader(object):
def __init__(self, db, filename, callback):
if not callable(callback):
callback = lambda (percent): None # dummy
self.db = db
self.dji = DjangoInterface()
self.filename = filename
self.callback = callback
self.debug = 0
def process(self):
sql = None
total = (self.dji.Note.count() +
self.dji.Person.count() +
self.dji.Event.count() +
self.dji.Family.count() +
self.dji.Repository.count() +
self.dji.Place.count() +
self.dji.Media.count() +
self.dji.Source.count())
self.trans = self.db.transaction_begin("",batch=True)
self.db.disable_signals()
count = 0.0
self.t = time.time()
# ---------------------------------
# Process note
# ---------------------------------
notes = self.dji.Note.all()
for note in notes:
data = self.dji.get_note(note)
self.db.note_map[str(note.handle)] = data
count += 1
self.callback(100 * count/total)
# ---------------------------------
# Process event
# ---------------------------------
events = self.dji.Event.all()
for event in events:
data = self.dji.get_event(event)
self.db.event_map[str(event.handle)] = data
count += 1
self.callback(100 * count/total)
# ---------------------------------
# Process person
# ---------------------------------
## Do this after Events to get the birth/death data
people = self.dji.Person.all()
for person in people:
data = self.dji.get_person(person)
self.db.person_map[str(person.handle)] = data
count += 1
self.callback(100 * count/total)
# ---------------------------------
# Process family
# ---------------------------------
families = self.dji.Family.all()
for family in families:
data = self.dji.get_family(family)
self.db.family_map[str(family.handle)] = data
count += 1
self.callback(100 * count/total)
# ---------------------------------
# Process repository
# ---------------------------------
repositories = self.dji.Repository.all()
for repo in repositories:
data = self.dji.get_repository(repo)
self.db.repository_map[str(repo.handle)] = data
count += 1
self.callback(100 * count/total)
# ---------------------------------
# Process place
# ---------------------------------
places = self.dji.Place.all()
for place in places:
data = self.dji.get_place(place)
self.db.place_map[str(place.handle)] = data
count += 1
self.callback(100 * count/total)
# ---------------------------------
# Process source
# ---------------------------------
sources = self.dji.Source.all()
for source in sources:
data = self.dji.get_source(source)
self.db.source_map[str(source.handle)] = data
count += 1
self.callback(100 * count/total)
# ---------------------------------
# Process media
# ---------------------------------
media = self.dji.Media.all()
for med in media:
data = self.dji.get_media(med)
self.db.media_map[str(med.handle)] = data
count += 1
self.callback(100 * count/total)
return None
def cleanup(self):
self.t = time.time() - self.t
msg = ngettext('Import Complete: %d second','Import Complete: %d seconds', self.t ) % self.t
self.db.transaction_commit(self.trans, _("Django import"))
self.db.enable_signals()
self.db.request_rebuild()
LOG.debug(msg)
def import_data(db, filename, callback=None):
g = DjangoReader(db, filename, callback)
g.process()
g.cleanup()
+3 -3
View File
@@ -2825,9 +2825,9 @@ def importData(database, filename, callback=None, cl=0):
if database.has_name_group_key(key) :
present = database.get_name_group_mapping(key)
if not value == present:
msg = _("Your family tree groups name %s together"
" with %s, did not change this grouping to %s") % (
key, present, value)
msg = _("Your family tree groups name %(key)s together"
" with %(present)s, did not change this grouping to %(value)s") % {
'key' : key, 'present' : present, 'value' : value }
LOG.warn(msg)
else:
database.set_name_group_mapping(key, value)
+6 -3
View File
@@ -688,7 +688,8 @@ class ProgenParser(object):
date.set(gen.lib.Date.QUAL_NONE, gen.lib.Date.MOD_ABOUT, gen.lib.Date.CAL_GREGORIAN, (0, month, year, None))
return date
log.warning(_("date did not match: '%s' (%s)") % (txt.encode('utf-8'), diag_msg or ''))
log.warning(_("date did not match: '%(text)s' (%(msg)s)") % {
'text' : txt.encode('utf-8'), 'msg' : diag_msg or '' } )
# Hmmm. Just use the plain text.
date.set_as_text(txt)
return date
@@ -1238,9 +1239,11 @@ class ProgenParser(object):
father_handle = father > 0 and self.__find_person_handle("I%d" % father) or None
mother_handle = mother > 0 and self.__find_person_handle("I%d" % mother) or None
if father > 0 and not father_handle:
log.warning(_("cannot find father for I%s (father=%d)") % (pers_id, father))
log.warning(_("cannot find father for I%(person)s (father=%(id)d)") % {
'person' : pers_id, 'id' : father } )
elif mother > 0 and not mother_handle:
log.warning(_("cannot find mother for I%s (mother=%d)") % (pers_id, mother))
log.warning(_("cannot find mother for I%(person)s (mother=%(mother)d)") % {
'person' : pers_id, 'mother' : mother } )
else:
fam = self.fm2fam.get((father_handle, mother_handle), None)
if not fam:
+7 -7
View File
@@ -1310,9 +1310,9 @@ class GrampsParser(UpdateCallback):
if self.db.has_name_group_key(key) :
present = self.db.get_name_group_mapping(key)
if not value == present:
msg = _("Your family tree groups name %s together"
" with %s, did not change this grouping to %s") % (
key, present, value)
msg = _("Your family tree groups name %(key)s together"
" with %(parent)s, did not change this grouping to %(value)s") % {
'key' : key, 'parent' : present, 'value' : value }
self.errmsg(msg)
else:
self.db.set_name_group_mapping(key, value)
@@ -2479,11 +2479,11 @@ def version_is_valid(filename, cli):
parser = VersionParser(filename)
if parser.get_xmlns_version() > libgrampsxml.GRAMPS_XML_VERSION:
msg = _("The .gramps file you are importing was made by version %s of "
"Gramps, while you are running an older version %s. "
msg = _("The .gramps file you are importing was made by version %(newer)s of "
"Gramps, while you are running an older version %(older)s. "
"The file will not be imported. Please upgrade to the latest "
"version of Gramps and try again."
) % (parser.get_gramps_version(), const.VERSION)
"version of Gramps and try again." ) % {
'newer' : parser.get_gramps_version(), 'older' : const.VERSION }
if cli:
LOG.warn(msg)
return False
+23 -23
View File
@@ -2,7 +2,7 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2009 Gary Burton
# Copyright (C) 2009-2010 Gary Burton
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -1814,6 +1814,7 @@ class GedcomParser(UpdateCallback):
TOKEN_RIN : self.__ignore,
TOKEN_NOTE : self.__repo_note,
TOKEN_RNOTE : self.__repo_note,
TOKEN_CHAN : self.__repo_chan,
}
self.event_parse_tbl = {
@@ -1904,6 +1905,9 @@ class GedcomParser(UpdateCallback):
self.person_fact_parse_tbl = {
TOKEN_TYPE : self.__person_fact_type,
TOKEN_SOUR : self.__person_attr_source,
TOKEN_NOTE : self.__person_attr_note,
TOKEN_RNOTE : self.__person_attr_note,
}
self.person_attr_parse_tbl = {
@@ -2640,11 +2644,7 @@ class GedcomParser(UpdateCallback):
self.__add_default_source(person)
# commit the person to the database
if person.change:
self.dbase.commit_person(person, self.trans,
change_time=state.person.change)
else:
self.dbase.commit_person(person, self.trans)
self.dbase.commit_person(person, self.trans, state.person.change)
def __person_sour(self, line, state):
"""
@@ -3250,7 +3250,6 @@ class GedcomParser(UpdateCallback):
def __person_fact_type(self, line, state):
state.attr.set_type(line.data)
self.__skip_subordinate_levels(state.level)
def __person_bapl(self, line, state):
"""
@@ -3682,11 +3681,7 @@ class GedcomParser(UpdateCallback):
self.__add_default_source(family)
# commit family to database
if family.change:
self.dbase.commit_family(family, self.trans,
change_time=family.change)
else:
self.dbase.commit_family(family, self.trans)
self.dbase.commit_family(family, self.trans, family.change)
def __family_husb(self, line, state):
"""
@@ -4795,7 +4790,7 @@ class GedcomParser(UpdateCallback):
state.level = level
self.__parse_level(state, self.source_func, self.__undefined)
self.dbase.commit_source(state.source, self.trans)
self.dbase.commit_source(state.source, self.trans, state.source.change)
def __source_attr(self, line, state):
"""
@@ -4889,6 +4884,15 @@ class GedcomParser(UpdateCallback):
"""
self.__parse_note(line, state.repo_ref, state.level+1)
def __repo_chan(self, line, state):
"""
@param line: The current line in GedLine format
@type line: GedLine
@param state: The current state
@type state: CurrentState
"""
self.__parse_change(line, state.repo, state.level+1)
def __source_abbr(self, line, state):
"""
@param line: The current line in GedLine format
@@ -4984,11 +4988,7 @@ class GedcomParser(UpdateCallback):
self.__add_default_source(media)
# commit the person to the database
if media.change:
self.dbase.commit_media_object(media, self.trans,
change_time=media.change)
else:
self.dbase.commit_media_object(media, self.trans)
self.dbase.commit_media_object(media, self.trans, media.change)
def __obje_form(self, line, state):
"""
@@ -5079,7 +5079,7 @@ class GedcomParser(UpdateCallback):
@param state: The current state
@type state: CurrentState
"""
self.__skip_subordinate_levels(state.level+1)
self.__parse_change(line, state.media, state.level+1)
def __person_attr_type(self, line, state):
"""
@@ -5152,7 +5152,7 @@ class GedcomParser(UpdateCallback):
state.level = 1
self.__parse_level(state, self.repo_parse_tbl, self.__ignore)
self.dbase.commit_repository(repo, self.trans)
self.dbase.commit_repository(repo, self.trans, repo.change)
def __repo_name(self, line, state):
"""
@@ -5494,8 +5494,8 @@ class GedcomParser(UpdateCallback):
line = self.__get_next_line()
if self.__level_is_finished(line, level):
if skips and self.want_parse_warnings:
msg = _("skipped %d subordinate(s) at line %d")\
% (skips, line.line - skips)
msg = _("skipped %(skip)d subordinate(s) at line %(line)d") % {
'skip' : skips, 'line' : line.line - skips }
self.__warn(msg)
return
skips += 1
@@ -5929,4 +5929,4 @@ def __build_date_string(day, mon, year, bce, mmap):
retval = "(%d %s)" % (day, mmap[mon])
else:
retval = "%d %s %d%s" % (day, mmap[mon], year, bce)
return retval
return retval
+3 -18
View File
@@ -120,6 +120,7 @@ class BasePersonView(ListView):
'person-update' : self.row_update,
'person-delete' : self.row_delete,
'person-rebuild' : self.object_build,
'person-groupname-rebuild' : self.object_build,
}
ListView.__init__(
@@ -290,31 +291,15 @@ class BasePersonView(ListView):
active_name = _("Delete Person (%s)") % name_displayer.display(person)
# delete the person from the database
# Above will emit person-delete, which removes the person via
# callback to the model, so row delete is signaled
self.dbstate.db.delete_person_from_database(person, trans)
# remove the person from the list
self.remove_from_person_list(person)
# commit the transaction
self.dbstate.db.transaction_commit(trans, active_name)
# select the previously active person, turn off the busy cursor
history = self.uistate.get_history(self.navigation_type(),
self.navigation_group())
history.back()
self.uistate.set_busy_cursor(False)
def remove_from_person_list(self, person):
"""Remove the selected person from the list. A person object is
expected, not an ID"""
node = self.model.get_node(person.get_handle())
path = self.model.on_get_path(node)
(col, row) = path
if row > 0:
self.selection.select_path((col, row))
elif row == 0 and self.model.on_get_iter(path):
self.selection.select_path(path)
def dummy_report(self, obj):
""" For the xml UI definition of popup to work, the submenu
Quick Report must have an entry in the xml

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