Compare commits

...

87 Commits

Author SHA1 Message Date
Stéphane Charette
ed0426ac34 3.0.0, It was just getting interesting.
svn: r10392
2008-03-25 05:30:25 +00:00
Erik De Richter
f720cfe7fb update and typos nl.po
svn: r10386
2008-03-24 08:07:15 +00:00
James G Sack
b95994678e (same as trunk r10378)
, , : Remove code that auto-generates descripion field
for events in imported gedcom. Such descriptions can always be done via
the "Extract event descriptions from event data" tool if really wanted.


svn: r10384
2008-03-23 22:42:18 +00:00
James G Sack
11406fffef (same as r10379 on trunk) remove dup NUM_CHILD entry in _DATAMAP list
svn: r10383
2008-03-23 22:35:32 +00:00
Jérôme Rapinat
90e56690fb de.po: update translation
svn: r10382
2008-03-23 19:35:32 +00:00
Brian Matherly
50265cc296 0001950: BUG: Book report, Ancestor Tree - selecting desired person do not work
svn: r10380
2008-03-23 19:32:50 +00:00
Jérôme Rapinat
0584a03899 fr.po: new strings ...
svn: r10377
2008-03-22 19:53:53 +00:00
Benny Malengier
fa1e30080c 0001937: Don't know GTK color !
Changes make this warning appear less, so partially resolved


svn: r10375
2008-03-22 15:39:33 +00:00
Peter Landgren
d8a8f12207 Fixed possible right to left translation issue.
svn: r10374
2008-03-22 13:54:31 +00:00
Peter Landgren
e18be38cc2 Fixed possible right to left translation issue.
svn: r10373
2008-03-22 13:48:01 +00:00
Jérôme Rapinat
a996c60201 fr.po: update translation
svn: r10372
2008-03-22 13:35:41 +00:00
Erik De Richter
7592313d61 typo dutch translation
svn: r10371
2008-03-22 11:51:04 +00:00
Benny Malengier
22b2c85358 set bookmarks editor transient too
gramps: 0001968: twice help click on bookmark closes application


svn: r10367
2008-03-21 22:39:34 +00:00
Benny Malengier
6395ae2a81 Export of gpkg saves paths in tarfile as path in database.
Import of gpkg exports media in home dir, sets base media path to that dir, so user can 
easily change position with move in filemanager, and change of base media path
0001966: import of gpkg copies media files to hidden dir & not accessible


svn: r10365
2008-03-21 22:25:44 +00:00
Raphael Ackermann
ca6d6d4955 Add a gtk loop in Bookmarks.edit() and only close the Bookmark editor if gtk.RESPONSE_CLOSE is issued
0001968: twice help click on bookmark closes application 

svn: r10363
2008-03-21 21:50:08 +00:00
Arturas Sleinius
e512644352 Updated Lithuanian translation
svn: r10359
2008-03-21 07:14:15 +00:00
Luigi Toscano
f1461a9265 Italian translation updates
svn: r10358
2008-03-21 01:08:55 +00:00
Erik De Richter
740aa0405b update dutch translation
svn: r10356
2008-03-20 19:33:21 +00:00
Jérôme Rapinat
166eece884 de.po: update translation
svn: r10355
2008-03-20 17:01:58 +00:00
Jérôme Rapinat
6cbdb0e4c1 fr.po: update translation
svn: r10354
2008-03-20 17:00:10 +00:00
Peter Landgren
143aa70a6a Updates Swedish translation.
svn: r10352
2008-03-20 09:30:47 +00:00
Peter Landgren
f9da7bca88 Correct fill colors
svn: r10350
2008-03-20 07:45:56 +00:00
Stéphane Charette
c96f77ef51 generated a new .pot file in preparation of 3.0 release
svn: r10349
2008-03-20 04:27:10 +00:00
Brian Matherly
0e37a365aa 0001803: Narrative Web Report Update
svn: r10348
2008-03-20 04:07:59 +00:00
Brian Matherly
334fed79ae 0001957: Orientation switch doesn't work for Graphviz reports.
0001940: GS PDF output is broken for Graphiz graphs. Page size depends on dpi

svn: r10347
2008-03-20 03:22:45 +00:00
Gary Burton
33e19a643c Bug check to see if database is already open.
svn: r10344
2008-03-19 21:30:26 +00:00
Gary Burton
923e3d2f6a Remove extraneous bracket
svn: r10343
2008-03-19 21:17:51 +00:00
Erik De Richter
b59805d5d9 link to wiki manual
svn: r10340
2008-03-19 19:15:05 +00:00
Benny Malengier
0afdcdc48f 2008-03-19 Benny Malengier <benny.malengier@gramps-project.org>
* src/Filters/SideBar/_MediaSidebarFilter.py
	* src/Filters/SideBar/_SidebarFilter.py
	* src/Filters/SideBar/_SourceSidebarFilter.py
	* src/Filters/SideBar/_EventSidebarFilter.py
	* src/Filters/SideBar/_FamilySidebarFilter.py
	* src/Filters/SideBar/_PlaceSidebarFilter.py
	* src/Filters/SideBar/_NoteSidebarFilter.py
	* src/Filters/SideBar/_RepoSidebarFilter.py
	* src/Filters/SideBar/_PersonSidebarFilter.py
	issue 0001941: Filter side bar grows to cover all information in view


svn: r10338
2008-03-19 11:26:08 +00:00
Jérôme Rapinat
6cb7eb77be fr.po: tweak improvements
svn: r10337
2008-03-19 10:55:44 +00:00
Gary Burton
03e714752d Allow event details to include an address clause. See gedcom specification at http://homepages.rootsweb.com/~pmcbride/gedcom/55gcch2.htm#EVENT_DETAIL
svn: r10335
2008-03-18 21:59:39 +00:00
Erik De Richter
7c982e344e updated dutch version
updated gramps.pot


svn: r10332
2008-03-17 10:26:42 +00:00
Erik De Richter
2db5afa52b correct two typos
svn: r10331
2008-03-17 10:11:38 +00:00
Doug Blank
938d844f35 Fixed surname count on Top Surnames and Surname Cloud Gramplets
svn: r10330
2008-03-17 03:33:59 +00:00
Jérôme Rapinat
5a3bdec970 pl.po: update translation
svn: r10327
2008-03-16 08:19:21 +00:00
Brian Matherly
d753903dda Fix file names for note rules.
svn: r10325
2008-03-15 21:07:50 +00:00
Brian Matherly
0d2ed79e46 0001938: Substring filter for notes does not work.
svn: r10324
2008-03-15 21:03:33 +00:00
Luigi Toscano
449203c668 Italian translation updates
svn: r10323
2008-03-15 18:23:26 +00:00
Peter Landgren
1c38e95944 Better handling of Ghostscript output.
svn: r10322
2008-03-15 17:16:08 +00:00
Peter Landgren
96bc205af0 Decimal comma/point, Issue 1939, fixed.
svn: r10320
2008-03-15 09:07:46 +00:00
Peter Landgren
4cf87cfa6c Update sv.po
svn: r10319
2008-03-15 08:03:41 +00:00
Peter Landgren
a6572c6f81 Unnessecary empty translatable string made untranslatable
svn: r10316
2008-03-15 08:01:17 +00:00
Jérôme Rapinat
5fe0eea37a fr.po: improve translation
svn: r10315
2008-03-15 06:45:15 +00:00
Brian Matherly
c691d7ea93 0001779: Texts "in." and "cm." on Document Options tab is not translatable
svn: r10313
2008-03-15 04:21:55 +00:00
Gary Burton
a95b3093e1 Revert change made in revision 10297
svn: r10311
2008-03-14 23:49:49 +00:00
Jérôme Rapinat
3e93a0b9c2 fr.po: update
svn: r10309
2008-03-14 18:35:31 +00:00
Erik De Richter
9a70f5e8ef updated dutch translation
svn: r10307
2008-03-14 16:46:34 +00:00
Jérôme Rapinat
c39ffa9ef7 fr.po: improve translation
svn: r10306
2008-03-14 14:50:33 +00:00
Jérôme Rapinat
120e4cce20 fr.po: start cleanup
svn: r10305
2008-03-14 13:36:49 +00:00
Peter Landgren
279b6225f9 Issue . Warning are given for many ouput cases with problems, update 3.
svn: r10304
2008-03-14 08:08:53 +00:00
Brian Matherly
1a9067e7de 0001908: BUG: running tools from command line
svn: r10302
2008-03-14 04:25:30 +00:00
Brian Matherly
961b06d57b 0001905: BUG in book command line report KeyError: 'bookname'
svn: r10300
2008-03-14 03:53:26 +00:00
Luigi Toscano
8fb50257d8 Italian translation updates
svn: r10299
2008-03-14 00:44:59 +00:00
Gary Burton
52923b9246 Bug 1280 make sure source media pages are created before the gallery
svn: r10297
2008-03-13 23:22:47 +00:00
Peter Landgren
298a023ca8 Issue . Warning are given for many error cases, update 2.
svn: r10293
2008-03-13 18:42:44 +00:00
Peter Landgren
23592e3aed Issue . Warning are given for many error cases, update 1.
svn: r10292
2008-03-13 17:47:30 +00:00
Luigi Toscano
c2358378da Italian translation updates
svn: r10291
2008-03-13 17:38:55 +00:00
Luigi Toscano
6c041d016e Italian translation updates
svn: r10290
2008-03-13 16:32:50 +00:00
Peter Landgren
f7d311f184 Issue . Warning are given for many error cases.
svn: r10289
2008-03-13 16:17:11 +00:00
Erik De Richter
4072288ea6 update nl.po and gramps.pot
svn: r10287
2008-03-13 07:39:49 +00:00
Brian Matherly
ddbc702c83 Remove the beta warning. I was going to add a welcome message, but there is a default welcom gramplet that works just as well.
svn: r10286
2008-03-13 03:54:09 +00:00
James G Sack
634be62d3b Change version to 2.90.5 (something below 3) until 3.0.0 is released/
Also added comment (dnl) line to make finding source of VERSION easier.


svn: r10285
2008-03-12 20:07:43 +00:00
Jérôme Rapinat
2d79f15cfe German Translation update
svn: r10284
2008-03-12 09:32:31 +00:00
Raphael Ackermann
636b8204f6 2008-03-12 Raphael Ackermann <raphael.ackermann@gmail.com>
Change automake to 1.6.3 foreign so that it won't ask for a Changelog.
GNU packages are obliged to have a ChangeLog, the foreign indicates it does not follow gnu rules.


svn: r10282
2008-03-12 08:25:47 +00:00
Brian Matherly
fe0810f19f 0001893: python src/gramps.py -u -O "merge" -a report -p "name=navwebpage,show=off": IndexError: list index out of range
svn: r10280
2008-03-12 03:23:32 +00:00
Brian Matherly
7cd056fc7b 0001888: Traceback when trying to delete a book report with non-ascii characters in the name.
svn: r10278
2008-03-12 02:50:14 +00:00
Brian Matherly
1c7d6829d6 New Slovak translation file from Lubo Vasko <pgval@inMail.sk>
svn: r10277
2008-03-12 02:34:55 +00:00
Brian Matherly
b9db018370 Patch from Peter Landgren with modification by Brian Matherly:
0001761: Style editor problems
0001921: Custom style colors not saving

svn: r10274
2008-03-12 02:18:42 +00:00
Luigi Toscano
d684fd400f Italian translation updates
svn: r10273
2008-03-12 00:50:07 +00:00
Luigi Toscano
9e0021fe9f Italian translation updates
svn: r10269
2008-03-11 17:23:15 +00:00
Doug Blank
95f43374b7 0001927: renamed glade variable to avoid name collision
svn: r10267
2008-03-11 10:58:54 +00:00
Raphael Ackermann
f397fa326a Remove polish gramps.1 as it is generated from gramps.1.in when autogen.sh is run.
svn: r10265
2008-03-11 09:02:03 +00:00
Luigi Toscano
3ed0317099 Italian translation updates
svn: r10263
2008-03-11 01:01:36 +00:00
Doug Blank
f801dfceba 0001925: fixed closing via title bar close button launched help
svn: r10262
2008-03-10 14:37:25 +00:00
Peter Landgren
7a7bd257d4 Update to r10258
svn: r10260
2008-03-10 14:22:50 +00:00
Doug Blank
3b27bdaefb 0001911: fixed sorting on counts
svn: r10258
2008-03-10 13:09:17 +00:00
Erik De Richter
4a30aaeca3 link to wiki manual
svn: r10255
2008-03-10 12:07:11 +00:00
Brian Matherly
81b255b596 Remove the ChangeLog files. SVN log messages will be used to generate a ChangeLog upon release. See http://www.gramps-project.org/wiki/index.php?title=Committing_Policies
svn: r10252
2008-03-10 04:18:10 +00:00
Doug Blank
0609c8a855 2008-03-09 Douglas S. Blank <dblank@cs.brynmawr.edu>
* src/images/Makefile.am (world.topo.200407): percent sign typo?
	* data/man/pl/Makefile.am: missing file added



svn: r10249
2008-03-10 00:43:32 +00:00
Raphael Ackermann
b2c6a1e969 Fix from previous commit (rev10246). Forgot to add the new files.
svn: r10247
2008-03-09 22:02:52 +00:00
Raphael Ackermann
f1a66988fd 2008-03-09 Łukasz Rymarczyk <yenidai@poczta.onet.pl>
* data/man/Makefile.am
	* data/man/pl/gramps.1.in
	* data/man/pl/Makefile.am
	* configure.in
	Added Polish man page file
	0001914: Polish man page for gramps 3.x 

svn: r10246
2008-03-09 21:43:17 +00:00
Erik De Richter
4702273d15 new dutch translation
svn: r10244
2008-03-09 20:31:41 +00:00
Erik De Richter
cfc621bed9 new gramps.pot
svn: r10241
2008-03-09 19:48:37 +00:00
Benny Malengier
456f0dc99f 2008-03-09 Benny Malengier <benny.malengier@gramps-project.org>
* src/gen/db/base.py: add docstring to find functions, 
	* src/gen/db/dbdir.py: add docstring to find functions, 



svn: r10235
2008-03-09 17:57:34 +00:00
Arturas Sleinius
02293637ff Updated Lithuanian translation
svn: r10234
2008-03-09 14:27:08 +00:00
Brian Matherly
57e1a3d376 0001917: UI font gets small when creating PDF documents.
svn: r10232
2008-03-09 03:10:39 +00:00
Brian Matherly
3264c7c843 Create a maintenance (stable) branch for the 3.0.X series of Gramps.
svn: r10231
2008-03-08 21:28:24 +00:00
64 changed files with 30649 additions and 48584 deletions

2328
ChangeLog

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

287
INSTALL

@@ -1,89 +1,236 @@
$Id$
Installation Instructions
*************************
This file contains some useful details on the installation from source code
for GRAMPS. It does not cover installation of a pre-built binary package.
For that use your package manager, the rest is already done by the packager.
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
configure vs autogen scripts
----------------------------
If you are building from released tarball, you should be able to just
run "./configure && make". However, if you're building from the SVN,
the configure is not present. You should auto-generate it by
running ./autogen.sh and then "make" and, finally, "make install".
Basic Installation
==================
Running ./autogen.sh on this branch of gramps requires the following
packages to be installed:
* automake-1.9
* gnome-common
* intltool
* libglib2.0-dev (may be called differently on other distros) and
maybe something else. If autogen.sh fails, it should inform you what's
missing.
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
Regular vs local installation
-----------------------------
This version of gramps requires, among others, the following to be done:
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. (Caching is
disabled by default to prevent problems with accidental use of stale
cache files.)
mime types for gramps MUST be properly installed.
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The usual ./configure, make, and make install as a root should do the trick.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You only need
`configure.ac' if you want to change it or regenerate `configure' using
a newer version of `autoconf'.
But be careful if you're using the non-default options or would like
to install without being root.
The simplest way to compile this package is:
The latter is possible, but you should supply additional arguments to
autogen or configure:
--with-mime-dir=$HOME/.local/share/mime
--disable-scrollkeeper
Most likely, such local install will also need some prefix with write
permissions for you:
--prefix=$HOME/my_gramps_path
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Whether you're doing local install or regular install,
YOU MUST INSTALL MIME TYPES.
YOU HAVE BEEN WARNED!
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
Installing under non-default prefix
-----------------------------------
As hinted above, mime types for gramps MUST be properly installed.
The "proper install" means installing
them where the shared mime system will find them.
3. Optionally, type `make check' to run any self-tests that come with
the package.
By default, the shared mime systems will look in these places:
1. /usr/share/mime
2. /usr/local/share/mime : this may be broken on some systems
3. $HOME/.local/share/mime : this is a per-user setup, not system-wide
There's a number of ways to instruct the shared mime system
to look in other places, but this is the whole other story.
4. Type `make install' to install the programs and any data files and
documentation.
So if you install some place other than /usr/share, you will most
likely need to add this option to autogen.sh/configure scripts:
--with-mime-dir=/usr/share/mime
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Using the --prefix=/usr/share and installing as a root will most
likely do everything correctly, so no extra care needs to be
taken. You should take extra care only if you are installing under
something like --prefix=/usr/local/my_gramps, /var/gramps123/blah, etc.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that the
`configure' script does not know about. Run `./configure --help' for
details on some of the pertinent environment variables.
Packager's issues
------------------
The above mime types must be installed.
However, the update-mime-database to process the newly installed types and schemas must be done in POST-INSTALLATION.
In packager's world, the install happens on packager's machine
into something like /tmp/gramps-tmp. However, the postinstall
should happen on the user's machine.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
If you have to use a `make' that does not support the `VPATH'
variable, you have to compile the package for one architecture at a
time in the source code directory. After you have installed the
package for one architecture, use `make distclean' before reconfiguring
for another architecture.
Installation Names
==================
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' cannot figure out automatically,
but needs to determine by the type of machine the package will run on.
Usually, assuming the package is built to be run on the _same_
architectures, `configure' can figure that out, but if it prints a
message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share, you
can create a site shell script called `config.site' that gives default
values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script). Here is a another example:
/bin/bash ./configure CONFIG_SHELL=/bin/bash
Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
configuration-related scripts to be executed by `/bin/bash'.
`configure' Invocation
======================
`configure' recognizes the following options to control how it operates.
`--help'
`-h'
Print a summary of the options to `configure', and exit.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.
To assist with that, there's an argument available in configure
(or autogen, which will pass it to configure) which disables
mime type processing:
--enable-packager-mode
This argument should disable postinstall calls made during
make install, and print a nasty warning during configure.
IT IS PACKAGER'S RESPONSIBILITY to follow the advice given
by the configure output and to copy the appropriate code
from the src/data/Makefile.am into the post-install (and post-uninstall)
of the particular packaging system.

10
NEWS

@@ -1,4 +1,4 @@
Version 3.0.0 -- the "" release
Version 3.0.0 -- the "It was just getting interesting." release
* Rewrite of the GEDCOM parser
* Export views to a spreadsheet
* Formatted notes
@@ -8,6 +8,14 @@ Version 3.0.0 -- the "" release
* New database manager, allowing create, deletion, renaming, repair and
revison control
Version 2.2.10 -- the "Lemon Curry?" release
Version 2.2.9 -- the "Here's your ninepence" release
Version 2.2.8 -- the "You sons of a silly person" release
Version 2.2.7 -- the "Well, I didn't vote for you." release
Version 2.2.6 -- the "Summarize Proust Competition" release
* Fix report option saving

@@ -4,17 +4,18 @@ dnl Process this file with autoconf to produce a configure script.
dnl May need to run automake && aclocal first
AC_PREREQ(2.57)
AC_INIT(gramps, 2.90.0, [gramps-bugs@lists.sourceforge.net])
dnl NOTE: 1st arg to macro below becomes the "VERSION"
AC_INIT(gramps, 3.0.0, [gramps-bugs@lists.sourceforge.net])
AC_CONFIG_SRCDIR(configure.in)
AM_INIT_AUTOMAKE(1.6.3)
AM_INIT_AUTOMAKE([1.6.3 foreign])
AC_CONFIG_MACRO_DIR([m4])
GNOME_DOC_INIT
RELEASE=0.SVN$(svnversion -n .)
dnl RELEASE=0.SVN$(svnversion -n .)
dnl RELEASE=0beta
dnl RELEASE=0rc1
dnl RELEASE=1
RELEASE=1
VERSIONSTRING=$VERSION
if test x"$RELEASE" != "x"
@@ -192,6 +193,7 @@ data/Makefile
data/man/Makefile
data/man/fr/Makefile
data/man/nl/Makefile
data/man/pl/Makefile
data/man/sv/Makefile
example/Makefile
example/gramps/Makefile

@@ -1,7 +1,7 @@
# This is the data/man level Makefile for Gramps
# $Id$
SUBDIRS = fr sv nl
SUBDIRS = fr sv nl pl
man_IN_FILES = gramps.1.in
man_MANS = $(man_IN_FILES:.1.in=.1)

14
data/man/pl/Makefile.am Normal file

@@ -0,0 +1,14 @@
# This is the data/man/pl level Makefile for Gramps
# $Id: Makefile.am 6189 2006-03-21 19:05:46Z rshura $
man_IN_FILES = gramps.1.in
man_MANS = $(man_IN_FILES:.1.in=.1)
mandir = @mandir@/pl
EXTRA_DIST = $(man_MANS) $(man_IN_FILES)
gramps.1: $(top_builddir)/config.status gramps.1.in
cd $(top_builddir) && CONFIG_FILES=data/man/pl/$@ $(SHELL) ./config.status
CLEANFILES=$(man_MANS)

366
data/man/pl/gramps.1.in Normal file

@@ -0,0 +1,366 @@
.TH gramps 1 "@VERSION@" "January 2008" "@VERSION@"
.SH NAME
gramps \- Genealogical Research and Analysis Management Programming System.
.br
(w wolnym tłumaczeniu: System Wspomagania Badań Genealogicznych
i Programowego Zarządzania Tą Informacją)
.SH SYNOPSIS
.B gramps
.RB [ \-?|\-\^\-help ]
.RB [ \-\^\-usage ]
.RB [ \-\^\-version ]
.RB [ \-l ]
.RB [ \-u|\-\^\-force-unlock ]
.RB [ \-O|\-\^\-open=
.IR BAZA_DANYCH
.RB [ \-f|\-\^\-format=
.IR FORMAT ]]
.RB [ \-i|\-\^\-import=
.IR PLIK
.RB [ \-f|\-\^\-format=
.IR FORMAT ]]
.RB [ \-i|\-\^\-import=
.IR ... ]
.RB [ \-o|\-\^\-output=
.IR PLIK
.RB [ \-f|\-\^\-format=
.IR FORMAT ]]
.RB [ \-a|\-\^\-action=
.IR AKCJA ]
.RB [ \-p|\-\^\-options=
.IR CIĄG_OPCJI ]]
.RB [
.IR PLIK
.RB ]
.if 0 .RB [ bonobo\ options ]
.if 0 .RB [ sound\ options ]
.RB [ \-\-version ]
.SH OPIS
.PP
\fIGramps\fP jest wolnym, darmowym programem genealogicznym OpenSource. Jest
napisany w Python, przy użyciu interfejsu GTK+/GNOME.
Dla każdego, kto wcześniej używał innego programu genealogicznego (np.
\fIFamily Tree Maker (TM)\fR, \fIPersonal Ancestral Files (TM)\fR,
lub GNU Geneweb), zapoznanie się z interfejsem Gramps'a będzie natychmiastowe.
Program obsługuje także import i eksport w popularnym formacie GEDCOM, który
jest używany przez większość programów genealogicznych na świecie.
.SH OPCJE
.TP
.BI gramps " PLIK"
Kiedy \fIPLIK\fR jest podany (bez żadnych flag) jako nazwa drzewa rodzinnego
albo nazwa katalogu z drzewem, to wybrane drzewo jest otwierane i rozpoczynana
jest sesja interaktywna. Jeśli PLIK jest formatem rozpoznawanym przez GRAMPS,
to tworzone jest puste drzewo, którego nazwa bazuje na nazwie \fIPLIKU\fP
i dane są do niego importowane. Pozostałe opcje są wtedy ignorowane.
Jest to sposób na używanie programu jako uchwytu obsługującego
dane genealogiczne, np. w przeglądarce internetowej. Takie wywołanie akceptuje
każdy format natywny dla grampsa, zobacz poniżej.
.br
.TP
.BI \-f,\-\^\-format= " FORMAT"
Jawne określenie formatu \fIPLIKU\fR przez poprzedzenie opcji
.ig
\fB\-O\fR,
..
\fB\-i\fR, lub \fB\-o\fR.
Jeśli opcja \fB\-f\fR nie jest podana dla żadnego \fIPLIKU\fR,
to format pliku jest określany na podstawie rozszerzenia albo typu MIME.
.br
Dostępne formaty wyjściowe to:
.br
\fBgramps\-xml\fR (używany jeśli \fIPLIK\fR kończy się na \fB.gramps\fR),
.br
\fBgedcom\fR (przyjmowany jeśli \fIPLIK\fR kończy się na \fB.ged\fR),
.br
lub dowolny plik eksportu obsługiwany przez system wtyczek GRAMPS.
.br
Formaty
dostępne dla importu to:
\fBgrdb\fR, \fBgramps\-xml\fR, \fBgedcom\fR,
.br
\fBgramps\-pkg\fR (przyjmowany jeśli \fIPLIK\fR kończy się na \fB.gpkg\fR),
.br
oraz \fBgeneweb\fR (przyjmowany jeśli \fIPLIK\fR ma rozszerzenie \fB.gw\fR).
.br
Formats dostępne dla eksportu to:
.ig
\fBgrdb\fR,
..
\fBgramps\-xml\fR, \fBgedcom\fR,
\fBgramps\-pkg\fR, \fBwft\fR (jeśli rozszerzenie \fIPLIKU\fR to \fB.wft\fR),
\fBgeneweb\fR, i \fBiso\fR (używany tylko, jeśli jawnie określony przez
parametr \fB\-f\fR ).
.TP
.BI \-l
Wyświetla listę dosŧępnych drzew genealogicznych.
.TP
.BI \-u,\-\^\-force-unlock
Wymusza odblokowanie bazy danych.
.TP
.BI \-O,\-\^\-open= " BAZA_DANYCH"
Otwiera \fIBAZĘ_DANYCH\fR, która musi istnieć w katalogu baz lub być nazwą
istniejącego drzewa rodzinnego. Jeśli nie podano akcji, to opcje eksportu
albo importu są wykonywane, a następnie jest uruchamiana sesja interaktywna
z otwarciem wybranej bazy.
.TP
.BI \-i,\-\^\-import= " PLIK"
Importuje dane z \fIPLIKU\fR. Jeśli nie określono bazy danych, to
tworzona jest tymczasowa baza kasowana po zamknięciu programu.
.br
Kiedy podany jest więcej niż jeden plik do importu, to każdy z nich musi być
poprzedzony flagą \fB\-i\fR. Pliki są importowane w kolejności podanej w linii
poleceń, np.: \fB\-i\fR \fIPLIK1\fR \fB\-i\fR \fIPLIK2\fR oraz
\fB\-i\fR \fIPLIK2\fR \fB\-i\fR \fIPLIK1\fR mogą utworzyć inne identyfikatory
(gramps ID) w bazie wynikowej.
.TP
.BI \-o,\-\^\-output= " PLIK"
Eksportuje dane do \fIPLIKU\fR. Dla formatu \fBiso\fR, \fIPLIK\fR natomiast
nazwą katalogu, do którego baza danych gramps zostanie zapisana.
Dla
.ig
\fBgrdb\fR,
..
\fBgramps\-xml\fR, \fBgedcom\fR, \fBwft\fR, \fBgramps\-pkg\fR,
oraz \fBgeneweb\fR, \fIPLIK\fR jest nazwą pliku wynikowego.
.br
Kiedy więcej niż jeden plik wyjściowy jest podany, każdy musi być poprzedzony
flagą \fB\-o\fR. Pliki będą zapisywane kolejno, w podanej przez parametry
kolejności.
.TP
.BI \-a,\-\^\-action= " AKCJA"
Wykonuje \fIAKCJĘ\fR na zaimportowanych danych. Działanie to jest wykonywane
dopiero, gdy wszystkie określone importy zakończą się powodzeniem. Aktualnie
dostępne akcje to:
.br
\fBsummary\fR (taka sama jak Raporty->Wyświetl->Podsumowanie bazy danych),
.br
\fBcheck\fR (tożsama z Narzędzia->Naprawa bazy danych->Sprawdź i napraw bazę),
.br
\fBreport\fR (generuje raport), oraz
.br
\fBtool\fR (uruchamia narzędzie/wtyczkę).
Zarówno \fBreport\fR jak i \fBtool\fR wymagają podania \fICIĄGU_OPCJI\fR
poprzedzonego flagą \fB\-p\fR ).
.br
\fICIĄG_OPCJI\fR powinien spełniać następujące warunki:
.br
Nie może zawierać spacji.
Jeśli niektóre argumenty wymagają spacji, ciąg powinien być enkapsulowany
w znakach cudzysłowu, (zobacz składnię powłoki). Ciąg opcji jest listą
parametrów z nazwą i wartością oddzielonymi znakiem równości. Kolejne
parametry muszą być oddzielone od siebie znakiem przecinka.
.br
Większość opcji dla raportów czy narzędzi jest specyficzna dla konkretnej opcji,
jednak część z opcji jest wspólna, szczególnie dla raportów.
.BI "name=nazwa"
.br
Opcja wymagana, określający który raport czy narzędzie będzie uruchamiane.
Jeśli podana wartość \fInazwy\fR nie pasuje do żadnego dostępnego raportu czy
narzędzia, zostanie wyświetlony komunikat o błędzie oraz lista dostępnych
raportów albo opcji (w zależności od wartości parametru \fIAKCJA\fR).
.BI "show=all"
.br
Wyświetla listę wszystkich nazw dostępnych opcji wraz z krótkim opisem dla
danego raportu albo narzędzia.
.BI "show=nazwa_opcji"
.br
Wyświetla opis funkcji udostępnianej przez daną \fInazwę_opcji\fR, jak również
listę parametrów, które akceptuje dana opcja.
.br
Używając powyższych opcji jesteś w stanie dowiedzieć się o wszystkich
możliwościach danego raportu.
.LP
Kiedy więcej niż jeden akcja wyjściowa jest podana, każda musi być poprzedzona
flagą \fB\-a\fR. Akcje są wykonywane jedna po drugiej, w kolejności w jakiej
występują w linii poleceń.
.TP
.BI \-d,\-\^\-debug= " NAZWA_LOGGERA"
Włącza logi debuggowania dla celów programistycznych i testowych. Zobacz
do kodu źródłowego po szczegóły.
.TP
.BI \-\^\-version
Wyświetla wersję programu i kończy działanie.
\" change 0 to 1 to enable output of OAF options
.if 1 \{
.PP
Następujące opcje są używane przy aktywacji Bonobo:
.TP
.BI \-\^\-oaf-ior-fd= "FD"
Deskryptor pliku, do którego wpisać OAF IOR.
.TP
.BI \-\^\-oaf-activate-iid= " IID"
OAF IID do aktywacji.
.TP
.BI \-\^\-oaf-private
Wstgrzymuje rejestrację serwera przez OAF.
\}
\" change 0 to 1 to enable output of Gnome sound options
.if 1 \{
.PP
Następujące opcje są używane do kontroli dźwięku generowanego za pomocą
Gnome Library.
.TP
.BI \-\^\-disable-sound
Wyłącza użycie serwera dźwięku.
.TP
.BI \-\^\-enable-sound
Włącza użycie serwera dźwięku.
.TP
.BI \-\^\-espeaker= " HOSTNAME:PORT"
Host:port na którym jest uruchomiony serwer dźwięku.
\}
.SH "Działanie"
.br
Jeśli pierwszy argument nie rozpoczyna się znakiem myślnik, (nie jest flagą),
to gramps będzie próbował otworzyć plik podany przez pierwszy argument, a
następnie sesję interaktywną a pozostałą część parametrów w linii poleceń
zignoruje.
.LP
Jeśli podana jest flaga \fB\-O\fR, będzie próbował otworzyć podaną bazę
i pracować na danych w niej zawartych realizując podane później polecenia
z linii komend.
.LP
Z flagą \fB\-O\fR czy bez, może występować wiele importów, eksportów oraz
akcji określonych za pomocą flag \fB\-i\fR, \fB\-o\fR, oraz \fB\-a\fR .
.LP
Kolejność podawania opcji \fB\-i\fR, \fB\-o\fR, czy \fB\-a\fR nie ma znaczenia.
Wykonywane są one zawsze w kolejności: wszystkie importy (jeśli podane) ->
wszystkie akcje (jeśli podane) -> wszystkie eksporty (jeśli podane)
Ale otwarcie bazy zawsze musi być na pierwszym parametrem !
.LP
Jeśli nie podano opcji \fB\-O\fR lub \fB\-i\fR, gramps uruchomi swoje główne
okno i rozpocznie normalną sesję interaktywną z pustą bazą danych (ponieważ
nie zdołał przetworzyć do niej żadnych danych).
.LP
Jeśli nie podano opcji\fB\-o\fR albo \fB\-a\fR gramps uruchomi swoje głowne
okno i rozpocznie normalną sesję interaktywną z bazą będącą wynikiem wszystkich importów. Ta baza będzie znajdować się w pliku \fBimport_db.grdb\fR
w katalogu \fB~/.gramps/import\fR.
.LP
Błąd podczas importu, eksportu albo dowolnej akcji będzie przekierowany na
\fIstdout\fR (jeśli wyjątek zostanie obsłużony przez gramps) albo na
\fIstderr\fR (jeśli nie jest obsłużony). Użyj standardowych przekierowań
strumieni \fIstdout\fR oraz \fIstderr\fR jeśli chcesz zapisać wyświetlane
informacje i błędy do pliku.
.SH PRZYKŁADY
.TP
Aby otworzyć istniejące drzewo rodzinne i zaimportować dane do niego, można wpisać:
\fBgramps\fR \fB\-O\fR \fI'Moje drzewo'\fR \fB\-i\fR \fI~/db3.gramps\fR
.TP
Powyższa opcja otwiera istniejące drzewo, ale gdy chcesz zrobić wykonać taką
samą akcję tworząc tymczasowe drzewo: wystarczy wpisać:
\fBgramps\fR \fB\-i\fR \fI'Moje drzewo'\fR \fB\-i\fR \fI~/db3.gramps\fR
.TP
Aby zaimportować cztery bazy (których formaty zostaną określone na podstawie
ich nazw) i następnie sprawdić powstałą bazę pod kątem błędów, należy wpisać:
\fBgramps\fR \fB\-i\fR \fIplik1.ged\fR \fB\-i\fR \fIplik2.tgz\fR \fB\-i\fR \fI~/db3.gramps\fR \fB\-i\fR \fIplik4.wft\fR \fB\-a\fR \fIcheck\fR
.TP
Aby jawnie określić formaty w powyższym przykładzie, należy dodać nazwy plików
z odpowiednimi opcjami \fB\-f\fR options:
\fBgramps\fR \fB\-i\fR \fIplik1.ged\fR \fB\-f\fR \fIgedcom\fR \fB\-i\fR \fIplik2.tgz\fR \fB\-f\fR \fIgramps-pkg\fR \fB\-i\fR \fI~/db3.gramps\fR \fB\-f\fR \fIgramps-xml\fR \fB\-i\fR \fIplik4.wft\fR \fB\-f\fR \fIwft\fR \fB\-a\fR \fIcheck\fR
.TP
Aby zachować bazę z wynikami wszystkich importów, należy dodać flagę \fB\-o\fR (należy użyć \fB\-f\fR jeśli nazwa pliku nie pozwala gramps'owi na odgadnięcie formatu wyjściowego):
\fBgramps\fR \fB\-i\fR \fIplik1.ged\fR \fB\-i\fR \fIplik2.tgz\fR \fB\-o\fR \fI~/nowy-pakiet\fR \fB\-f\fR \fIgramps-pkg\fR
.TP
W celu zaimportwania trzech baz i rozpoczęcia sesji interaktywnej z wynikiem
importu należy użyć polecenia podobnego do poniższego:
\fBgramps\fR \fB\-i\fR \fIplik1.ged\fR \fB\-i\fR \fIplik22.tgz\fR \fB\-i\fR \fI~/db3.gramps\fR
.TP
Aby uruchomić narzędzie weryfikacji z linii poleceń i wyświetlić wyniki na
stdout:
\fBgramps\fR \fB\-O\fR \fI'Moje drzewo'\fR \fB-a\fR \fItool\fR \fB-p\fR \fBname\fR=\fIverify\fR
.TP
Zawsze można też po prostu uruchomić sesję interaktywną wpisująć:
\fBgramps\fR
.SH ZMIENNE ŚRODOWISKOWE
Program sprawdza w systemie istnienie i wartości następujących zmiennych:
\fBLANG\fR - określa ustawienia, jaki język zostanie wybrany.
Np.: polski to pl_PL.UTF-8.
\fBGRAMPSHOME\fR - określa folder, w którym będzie zapisywane ustawienia i bazy
programu. Domyślnie jest on nieustawiony, a program przyjmuje, że katalog
z danymi zostanie utworzony w profilu użytkownika (zmienna HOME pod Linuxem
albo USERPROFILE pod Windows 2000/XP).
.SH KONCEPCJA
Obsługa systemu rozszerzeń bazującego na pythonie, pozwalającego na dodawanie
formatów importu i eksportu zapisów, generatorów raportów, narzędzi i filtrów
wyświetlania bez modyfikowania głównego programu
.LP
Dodatkowo oprócz generowania standardowego wyjścia na drukarkę, raporty mogą
także być generowane dla innch systemów i do innych formatów, takich jak:
\fIOpenOffice.org\fR, \fIAbiWord\fR, HTML, lub LaTeX aby umożliwić użytkownikm
wybór formatu wyjściowego w zależności od ich potrzeb.
.SH ZNANE BŁĘDY I OGRANICZENIA
Prawdopodobne. Lista błędów i propozycji znajduje się na:
\fIhttp://developers.gramps-project.org\fR.
.SH PLIKI
.LP
\fI${PREFIX}/bin/gramps\fP
.br
\fI${PREFIX}/share/gramps\fP
.br
\fI${HOME}/.gramps\fP (jeśli nie użyta została zmienna środowiskowa GRAMPSHOME)
.SH AUTORZY
Donald Allingham \fI<don@gramps-project.org>\fR
.br
\fIhttp://gramps.sourceforge.net\fR
.LP
Ta strona man jest tłumaczeniem strony man napisanej przez:
.br
Brandon L. Griffith \fI<brandon@debian.org>\fR
.br
dla systemu Debian GNU/Linux.
.LP
Ta strona aktualnie jest pod opeką:
.br
Projekt Gramps\fI<xxx@gramps-project.org>\fR
.br
Tłumaczenie na polski: Łukasz Rymarczyk <yenidai@poczta.onet.pl>
.br
.SH DOCUMENTATION
Dokumentacja użytkownika jest dostępna poprzez standardową przeglądarkę
pomocy systemu GNOME. Dokumentacja dostępna jest także w formacie XML jako
plik \fBgramps-manual.xml\fR w folderze \fIdoc/gramps-manual/$LANG\fR
w głównym źródle dystrybucji.
.LP
Dokumentacja dla programistów jest dostępna na stronie projektu:
\fIhttp://developers.gramps-project.org\fR.

@@ -1,716 +0,0 @@
2008-03-08 Luigi Toscano <luigi.toscano@tiscali.it>
* it.po: massive updates, still far from completion
2008-03-08 Jerome Rapinat <romjerome@yahoo.fr>
* fr.po: Translation update
2008-03-06 Espen Berg <espenbe@gmail.com>
* nb.po: Updated Norwegian translation (still some work to do)
* no.po: Updated Norwegian translation (still some work to do)
2008-03-03 Mirko Leonhäuser <mirko@leonhaeuser.de>
* de.po : Translation update
2008-03-03 Jerome Rapinat <romjerome@yahoo.fr>
* fr.po : update
2008-03-01 Frederik De Richter <frederik.de.richter@pandora.be>
* gramps.pot: update
* nl.po: Translation update
2008-02-29 Jerome Rapinat <romjerome@yahoo.fr>
* fr.po : update, will clean up old references soon (RC)
2008-02-25 Raphael Ackermann <raphael.ackermann@gmail.com>
* POTFILES.in : add missing plugins/DateParserDisplayTest.py #0001819
2008-02-23 Bernard Banko <bernard.banko@siol.net>
* sl.po: Translation update
2008-02-22 Frederik De Richter <frederik.de.richter@pandora.be>
* gramps.pot: update to include manual strings
* nl.po: Translation update
2008-02-22 Łukasz Rymarczyk <yenidai@poczta.onet.pl>
* pl.po: Translation update
2008-02-21 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation
2008-02-21 Stéphane Charette <stephanecharette@gmail.com>
* gramps.pot
* POTFILES.in: fixed typo (plubins versus plugins)
2008-02-20 Zdeněk Hataš <zdenek.hatas@gmail.com>
* cs.po Corrections and update of cs translation.
2008-02-19 Jerome Rapinat <romjerome@yahoo.fr>
* fr.po: Translation update
2008-02-19 Peter Landgren <peter.talken@telia.com>
* sv.po: Translation update, mnemonic changes
2008-02-18 Jerome Rapinat <romjerome@yahoo.fr>
* fr.po: Translation update
2008-02-14 Frederik De Richter <frederik.de.richter@pandora.be>
* gramps.pot: update to include manual strings
* nl.po: Translation update
2008-02-16 Espen Berg <espenbe@gmail.com>
* nb.po: Updated Norwegian translation (still some work to do)
* no.po: Updated Norwegian translation (still some work to do)
2008-02-15 Espen Berg <espenbe@gmail.com>
* nb.po: some updates on Norwegian translation (still a lot to do)
* no.po: some updates on Norwegian translation (still a lot to do)
2008-02-15 Jerome Rapinat <romjerome@yahoo.fr>
* fr.po: Translation update
2008-02-14 Frederik De Richter <frederik.de.richter@pandora.be>
* gramps.pot: update
2008-02-08 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation
2008-02-05 Raphael Ackermann <raphael.ackermann@gmail.com>
* POTFILES.in: remove checkpoint reference
2008-02-02 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation
2008-02-02 Łukasz Rymarczyk <yenidai@poczta.onet.pl>
* pl.po: Translation update
2008-01-31 Mirko Leonhaeuser <mirko@leonhaeuser.de>
* de.po: Translation update
2008-01-29 Jerome Rapinat <romjerome@yahoo.fr>
* gramps.pot: update template
* fr.po: Translation update
2008-01-28 Łukasz Rymarczyk <yenidai@poczta.onet.pl>
* pl.po: Translation update
2008-01-28 Jerome Rapinat <romjerome@yahoo.fr>
* fr.po: use correct translation for beta
2008-01-24 Boril Gourinov <boril.gourinov@gmail.com>
* bg.po: Translation update
2008-01-15 Jerome Rapinat <romjerome@yahoo.fr>
* POTFILE.in : add missing plugins/References.py
* fr.po: Translation update
2008-01-14 Mirko Leonhaeuser <mirko@leonhaeuser.de>
* de.po: Translation update
2008-01-13 Josip <josip@pisoj.com>
* hr.po: Translation update
2008-01-07 Jerome Rapinat <romjerome@yahoo.fr>
* fr.po: Translation update
2008-01-05 Josip <josip@pisoj.com>
* hr.po New language, Croatian
2008-01-02 Frederik De Richter <frederik.de.richter@pandora.be>
* nl.po: Translation update Fuzzy:0 Untranslated: 0
2007-12-31 Boril Gourinov <boril.gourinov@gmail.com>
* bg.po: New language, bulgarian
2007-12-30 Jerome Rapinat <romjerome@yahoo.fr>
* POTFILES.in : update
* gramps.pot : update template
* fr.po: Translation update
2007-12-28 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation
2007-12-24 Jerome Rapinat <romjerome@yahoo.fr>
* fr.po: Translation update
2007-12-23 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation
2007-12-23 Stéphane Charette <stephanecharette@gmail.com>
* gramps.po: update to get ready for 3.0.0 beta
2007-12-22 Zdenek Hatas <zdenek.hatas@gmail.com>
* cs.po: Translation update
2007-12-21 Frederik De Richter <frederik.de.richter@pandora.be>
* nl.po: Translation update Fuzzy:98 Untranslated: 4
2007-12-20 Jerome Rapinat <romjerome@yahoo.fr>
* POTFILES.in : add plugins/GVRelGraph.py reference
* gramps.pot : update template
* fr.po: Translation update
2007-12-19 Jerome Rapinat <romjerome@yahoo.fr>
* fr.po: Translation improvements (media is plurial)
2007-12-17 Espen Berg <espenbe@gmail.com>
* nb.po: Translation update (some untranslated phrases)
* no.po: Translation update (some untranslated phrases)
2007-11-27 Espen Berg <espenbe@gmail.com>
* nb.po: Translation update
* no.po: Translation update
2007-11-16 Mirko Leonhäuser <mirko@leonhaeuser.de>
* de.po: Translation update
2006-11-16 Martin Hawlisch <Martin.Hawlisch@gmx.de>
* de.po: Small updates. Still a lot todo.
2007-10-30 Jerome Rapinat <romjerome@yahoo.fr>
* fr.po: Translation update
* gramps.pot: commit updated template
2007-10-25 Espen Berg <espenbe@gmail.com>
* nb.po: Translation update (still some untranslated phrases)
* no.po: Translation update (still some untranslated phrases)
2007-10-14 Frederik De Richter <frederik.de.richter@pandora.be>
* nl.po: Translation update (125 fuzzies, 12 untranslated)
2007-10-10 Bernard Banko <bernard.banko@siol.net>
* sl.po: New language, slovenian
2007-09-17 Luiz Gonzaga <lfilho@gmail.com>
* pt_BR.po: Update.
2007-09-17 Espen Berg <espenbe@gmail.com>
* nb.po: Translation update (still some untranslated phrases)
* no.po: Translation update (still some untranslated phrases)
2007-09-02 Espen Berg <espenbe@gmail.com>
* nb.po: Translation update (still some untranslated phrases)
* no.po: Translation update (still some untranslated phrases)
2007-09-01 Peter Landgren <peter.talken@telia.com>
* sv.po: Update.
2007-08-30 Espen Berg <espenbe@gmail.com>
* nb.po: Translation update (still some untranslated phrases)
* no.po: Translation update (still some untranslated phrases)
2007-08-22 Espen Berg <espenbe@gmail.com>
* nb.po: Translation update
* no.po: Translation update
2007-07-02 Peter Landgren <peter.talken@telia.com>
* sv.po: Update.
2007-06-23 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new files.
2007-06-16 Peter Landgren <peter.talken@telia.com>
* sv.po: Update.
2007-06-16 Matthias Alles <alles@rhrk.uni-kl.de>
* de.po: Fixes.
2007-06-15 Matthias Alles <alles@rhrk.uni-kl.de>
* de.po: Fix the "was the son of" problem.
2007-06-13 Morten Bo Johansen <mbj@spamcop.net>
* da.po: Translation update.
2007-05-24 Lubo Vasko <pgval@inMail.sk>
* sk.po: Translation update.
2007-05-21 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation
2007-05-21 Stefan Björk <betula@users.sourceforge.net>
* sv.po: Translation update; bug #0001058.
2007-05-17 Espen Berg <espenbe@gmail.com>
* nb.po: Translation update
* no.po: Translation update
2007-05-14 Espen Berg <espenbe@gmail.com>
* nb.po: Translation update
* no.po: Translation update
2007-04-17 Lubo Vasko <pgval@inMail.sk>
* sk.po: Translation update.
2007-04-17 Piotr Czubaszek <pioterus@gmail.com>
* pl.po: Translation update.
2007-04-17 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation
2007-03-08 Stefan Björk <betula@users.sourceforge.net>
* sv.po: Translation update.
2007-03-07 Stefan Björk <betula@users.sourceforge.net>
* sv.po: Translation update.
2007-02-20 Espen Berg <espenbe@gmail.com>
* nb.po: Translation update
* no.po: Translation update
2007-02-15 Piotr Czubaszek <pioterus@gmail.com>
* pl.po: Translation update.
2007-02-14 Espen Berg <espenbe@gmail.com>
* nb.po: Translation update
* no.po: Translation update
2007-02-12 Lubo Vasko <pgval@inMail.sk>
* sk.po: Translation update.
2007-02-03 Zdenek Hatas <zdenek.hatas@gmail.com>
* cs.po: Minor translation update.
2007-01-29 Piotr Czubaszek <pioterus@gmail.com>
* pl.po: Translation update.
2007-01-28 Alex Roitman <shura@gramps-project.org>
* ru.po: Translation update.
2007-01-27 Piotr Czubaszek <pioterus@gmail.com>
* pl.po: Translation update.
2007-01-24 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation.
2007-01-20 Zdenek Hatas <zdenek.hatas@gmail.com>
* cs.po: updated according to template.
translation updates.
2007-01-15 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation.
2007-01-15 Piotr Czubaszek <pioterus@gmail.com>
* pl.po: Translation update.
2007-01-14 Zdenek Hatas <zdenek.hatas@gmail.com>
* cs.po: Update translation.
2007-01-13 Zdenek Hatas <zdenek.hatas@gmail.com>
* cs.po: Update translation.
2007-01-04 Eero Tamminen <eerot@sf>
* fi.po: fix some translations
2007-01-01 Eero Tamminen <eerot@sf>
* fi.po: Translation "complete"
2006-12-27 Eero Tamminen <eerot@sf>
* fi.po: merge with latest, fix everything reported by check_po,
almost fully translated now
2006-12-25 Stefan Bj<42>k <betula@users.sourceforge.net>
* sv.po: Update.
2006-12-24 Stefan Bjork <betula@users.sourceforge.net>
* sv.po: Update.
2006-12-23 Alex Roitman <shura@gramps-project.org>
* ru.po: Update.
2006-11-22 Morten Bo Johansen <mbj@spamcop.net>
* da.po: Translation update.
2006-12-21 Lubo Vasko <pgval@inMail.sk>
* sk.po: Translation update.
2006-12-19 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation.
2006-12-19 Piotr Czubaszek <pioterus@gmail.com>
* pl.po: Translation update.
2006-12-19 Lubo Vasko <pgval@inMail.sk>
* sk.po: Translation update.
2006-12-17 Piotr Czubaszek <pioterus@gmail.com>
* pl.po: Translation update.
2006-12-13 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: List new files.
2006-12-10 Eero Tamminen <eerot@sf>
* fi.po: merge with latest, fix all % mismatches and repo translations
2006-12-08 Piotr Czubaszek <pioterus@gmail.com>
* pl.po: Translation update.
2006-12-06 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: List new file.
2006-12-05 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation.
2006-12-04 Piotr Czubaszek <pioterus@gmail.com>
* pl.po: Translation update.
2006-12-03 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation.
2006-12-01 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: List new file.
2006-11-30 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: List new files.
2006-11-29 Lubo Vasko <pgval@post.sk>
* sk.po: Translation update.
2006-11-21 Espen Berg <espenbe@gmail.com>
* nb.po: updated Norwegian translation
* no.po: updated Norwegian translation
2006-11-18 Piotr Czubaszek <pioterus@gmail.com>
* pl.po: Translation update.
2006-11-17 Morten Bo Johansen <mbj@spamcop.net>
* da.po: Translation update.
2006-11-16 Lubo Vasko <pgval@post.sk>
* sk.po: Translation update.
2006-11-16 Piotr Czubaszek <pioterus@gmail.com>
* pl.po: Translation update.
2006-11-16 Espen Berg <espenbe@gmail.com>
* nb.po: updated Norwegian translation, cleanup.
* no.po: updated Norwegian translation, cleanup.
2006-11-14 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation, cleanup.
2006-11-12 Stefan Bjork <betula@users.sourceforge.net>
* sv.po: Cleanup.
2006-11-08 Alex Roitman <shura@gramps-project.org>
* ru.po: Cleanup.
2006-11-08 Stefan Bjork <betula@users.sourceforge.net>
* sv.po: Unescaped characters fix.
2006-11-08 Arpad Horvath <horvath.arpad@szgti.bmf.hu>
* hu.po: Translation update.
2006-11-08 Morten Bo Johansen <mbj@spamcop.net>
* da.po: Translation update.
2006-11-07 Lubo Vasko <pgval@post.sk>
* sk.po: Translation update.
2006-11-07 Jerome Rapinat <romjerome@yahoo.fr>
* fr.po: Translation update
* POTFILES.in: Add src/plugins/RemoveUnused.py
2006-11-06 Martin Hawlisch <Martin.Hawlisch@gmx.de>
* tr.po: Fixed some syntax error that made make fail.
2006-11-05 Mehmet Ugur Kecik <mukecik@yahoo.com>
* tr.po: Add Turkish translation.
2006-11-03 Alex Roitman <shura@gramps-project.org>
* gramps.pot: Update.
2006-11-03 Jerome Rapinat <romjerome@yahoo.fr>
* fr.po: Translation update
* POTFILES.in: Add src/Reorder.py
2006-11-02 Alex Roitman <shura@gramps-project.org>
* gramps.pot: Add to SVN.
2006-10-29 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation.
2006-10-29 Alexandre Prokoudine <alexandre.prokoudine@gmail.com>
* ru.po: Update.
2006-10-29 Espen Berg <espenbe@gmail.com>
* nb.po: Bug-fix in Norwegian translation.
* nn.po: Bug-fix in Norwegian translation.
2006-10-29 Stefan Bjork <betula@users.sourceforge.net>
* sv.po: Update swedish translation.
2006-10-29 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation.
2006-10-27 Morten Bo Johansen <mbj@spamcop.net>
* da.po: Translation update.
2006-10-26 Alex Roitman <shura@gramps-project.org>
* *.po: merge new string.
2006-10-27 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation.
2006-10-27 Stefan Bjork <betula@users.sourceforge.net>
* sv.po: Update translation.
2006-10-26 Alex Roitman <shura@gramps-project.org>
* *.po: merge new string.
2006-10-26 Lubo Vasko <pgval@post.sk>
* sk.po: Update translation.
2006-10-24 Piotr Czubaszek <pioterus@gmail.com>
* pl.po: Translation update.
2006-10-24 Alex Roitman <shura@gramps-project.org>
* ru.po: Update translation.
2006-10-24 Espen Berg <espenbe@gmail.com>
* nb.po: Updated Norwegian translation.
* no.po: Updated Norwegian translation.
2006-10-24 Stefan Bjork <betula@users.sourceforge.net>
* sv.po: Update translation.
2006-10-24 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation.
2006-10-23 Jerome Rapinat <romjerome@yahoo.fr>
* fr.po: Translation update.
* POTFILES.in: Typo.
2006-10-19 Piotr Czubaszek <pioterus@gmail.com>
* pl.po: Translation update.
* POTFILES.in: Add new file.
2006-10-19 Lubo Vasko <pgval@post.sk>
* sk.po: Update translation.
2006-10-17 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation.
2006-10-15 Piotr Czubaszek <pioterus@gmail.com>
* pl.po: Translation update.
2006-10-15 Espen Berg <espenbe@gmail.com>
* nb.po, no.po: Translation update.
2006-10-13 Alex Roitman <shura@gramps-project.org>
* *.po: Merge all translations with new strings.
* sk.po: Update translation.
2006-10-11 Lubo Vasko <pgval@post.sk>
* sk.po: Update translation.
2006-10-10 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Include all of Selectors package.
2006-10-09 Morten Bo Johansen <mbj@spamcop.net>
* da.po: Translation update.
2006-10-04 Lubo Vasko <pgval@post.sk>
* sk.po: Update translation.
2006-10-03 Stefan Bjork <betula@users.sourceforge.net>
* sv.po: Updated Swedish translation.
2006-09-30 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation.
2006-09-27 Stefan Bjork <betula@users.sourceforge.net>
* sv.po: Updated Swedish translation (work in progess).
2006-09-11 Jerome Rapinat <romjerome@yahoo.fr>
* fr.po: updated French translation.
* POTFILES.in: Enable title for selectors.
2006-09-09 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation.
2006-09-05 Arpad Horvath <horvath.arpad@szgti.bmf.hu>
* hu.po: Translation update.
2006-09-01 Arpad Horvath <horvath.arpad@szgti.bmf.hu>
* hu.po: Translation update.
2006-08-31 Zdenek Hatas <zdenek.hatas@gmail.com>
* cs.po: Update translation.
2006-08-30 Zdenek Hatas <zdenek.hatas@gmail.com>
* cs.po: Update translation.
2006-08-29 Arpad Horvath <horvath.arpad@szgti.bmf.hu>
* hu.po: Translation update from 2.0.x branch.
2006-08-29 Zdenek Hatas <zdenek.hatas@gmail.com>
* cs.po: Update translation.
2006-08-27 Alex Roitman <shura@gramps-project.org>
* *.po: Merge all translations with the new template for 2.1.95.
2006-08-25 Arpad Horvath <horvath.arpad@szgti.bmf.hu>
* hu.po: Translation update from 2.0.x branch.
2006-08-23 Zdenek Hatas <zdenek.hatas@gmail.com>
* cs.po: Update translation.
2006-08-22 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Reflect directory change.
2006-08-21 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation.
2006-08-19 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new file.
2006-08-18 Kees Bakker <kees.bakker@xs4all.nl>
* nl.po: Translation update.
2006-08-17 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation.
2006-08-13 Alex Roitman <shura@gramps-project.org>
* *.po: update all po files.
2006-08-09 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new files.
2006-08-07 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new files.
2006-08-06 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new files.
2006-08-05 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new files.
2006-08-04 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Unlist plugins that are not shipped.
Add new files.
2006-08-03 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new files.
2006-08-02 Alex Roitman <shura@gramps-project.org>
* ru.po: Translation update.
2006-07-31 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Remove obsolete file;
reflect the name change of Merge -> FindDupes.
* ru.po: Start on Russian translation.
2006-07-30 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add missing file.
2006-07-25 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add missing files.
2006-07-23 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation.
2006-07-16 Morten Bo Johansen <mbj@spamcop.net>
* da.po: Translation update.
2006-07-15 Alex Roitman <shura@gramps-project.org>
* check_po: Open correct file.
2006-06-22 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new file.
2006-06-15 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new file.
2006-06-11 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Remove plugin that is not shipped.
* gramps.pot: Update.
2006-06-04 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add missing files.
2006-05-30 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Change files due to module split.
2006-05-28 Alex Roitman <shura@gramps-project.org>
* gramps.pot: Update.
2006-05-28 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation.
2006-05-25 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new files.
2006-05-23 Arturas Sleinius <asleinius@users.sourceforge.net>
* lt.po: updated Lithuanian translation.
2006-05-22 Alex Roitman <shura@gramps-project.org>
* gramps.pot: Update.
2006-05-18 Espen Berg <espenbe@gmail.com>
* nb.po, no.po: Translation update.
2006-05-17 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new file.
2006-05-16 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new files; remove old files.
2006-05-15 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new files.
2006-05-14 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new file.
* gramps.pot: update.
2006-05-12 Alex Roitman <shura@gramps-project.org>
* gramps.pot: Update.
* POTFILES.in: Add missing files.
2006-05-10 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new file.
2006-05-07 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add missing file.
2006-05-06 Alex Roitman <shura@gramps-project.org>
* gramps.pot: Update template.
* POTFILES.in: Add missing files from RelLib.
2006-05-05 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new file.
2006-05-04 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new files.
Update.
* gramps.pot: Update.
2006-05-02 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new files.
2006-05-01 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new file.
2006-04-27 Alex Roitman <shura@gramps-project.org>
* pt_BR.po: Convert to utf8 encoding.
* zh_CN.po: Convert to utf8 encoding.
* pl.po: Convert to utf8 encoding.
* no.po: Convert to utf8 encoding.
* it.po: Convert to utf8 encoding.
* sk.po: Convert to utf8 encoding.
* da.po: Convert to utf8 encoding.
* nb.po: Convert to utf8 encoding.
2006-04-21 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Remove obsolete file.
2006-04-19 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new files.
2006-04-06 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Add new files to the list.
* gramps.pot: regenerate the template.
2006-03-18 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Remove RelImage.py from the list.
2006-03-15 Alex Roitman <shura@gramps-project.org>
* *.po: Moved po files from old po directory.

@@ -633,8 +633,8 @@ src/Filters/Rules/Repository/__init__.py
src/Filters/Rules/Note/_AllNotes.py
src/Filters/Rules/Note/_HasIdOf.py
src/Filters/Rules/Note/_HasMarkerOf.py
src/Filters/Rules/Note/_HasNoteMatchingSubstringOf.py
src/Filters/Rules/Note/_HasNoteRegexp.py
src/Filters/Rules/Note/_MatchesSubstringOf.py
src/Filters/Rules/Note/_MatchesRegexpOf.py
src/Filters/Rules/Note/_HasNote.py
src/Filters/Rules/Note/_HasReferenceCountOf.py
src/Filters/Rules/Note/_MatchesFilter.py

2576
po/de.po

File diff suppressed because it is too large Load Diff

2412
po/fr.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

5248
po/it.po

File diff suppressed because it is too large Load Diff

5027
po/lt.po

File diff suppressed because it is too large Load Diff

3448
po/nl.po

File diff suppressed because it is too large Load Diff

4803
po/pl.po

File diff suppressed because it is too large Load Diff

20875
po/sk.po

File diff suppressed because it is too large Load Diff

2232
po/sv.po

File diff suppressed because it is too large Load Diff

@@ -27,7 +27,7 @@
# Standard python modules
#
#-------------------------------------------------------------------------
from gettext import gettext as _
from cStringIO import StringIO
#-------------------------------------------------------------------------
@@ -54,6 +54,15 @@ import GrampsDisplay
from BasicUtils import name_displayer
import ListModel
import Utils
from TransUtils import sgettext as _
#-------------------------------------------------------------------------
#
# Constants
#
#-------------------------------------------------------------------------
WIKI_HELP_PAGE = 'Gramps_3.0_Wiki_Manual_-_Navigation'
WIKI_HELP_SEC = _('manual|Bookmarks')
#-------------------------------------------------------------------------
#
@@ -192,6 +201,7 @@ class Bookmarks :
self.top = gtk.Dialog(title)
self.top.set_default_size(400, 350)
self.top.set_modal(True)
self.top.set_transient_for(self.uistate.window)
self.top.set_has_separator(False)
self.top.vbox.set_spacing(5)
label = gtk.Label('<span size="larger" weight="bold">%s</span>'
@@ -245,12 +255,15 @@ class Bookmarks :
self.namemodel.connect_model()
self.modified = False
self.response = self.top.run()
if self.response == gtk.RESPONSE_HELP:
self.help_clicked()
if self.modified:
self.redraw_and_report_change()
self.top.destroy()
while True:
self.response = self.top.run()
if self.response == gtk.RESPONSE_HELP:
self.help_clicked()
elif self.response == gtk.RESPONSE_CLOSE:
if self.modified:
self.redraw_and_report_change()
self.top.destroy()
break
def delete_clicked(self, obj):
"""Remove the current selection from the list."""
@@ -293,8 +306,8 @@ class Bookmarks :
def help_clicked(self):
"""Display the relevant portion of GRAMPS manual."""
GrampsDisplay.help('gramps-nav')
self.response = self.top.run()
GrampsDisplay.help('gramps-nav', webpage=WIKI_HELP_PAGE,
section=WIKI_HELP_SEC)
class ListBookmarks(Bookmarks):

@@ -67,8 +67,6 @@ USE_LAST_VIEW = ('preferences', 'use-last-view', 0)
FAMILY_SIBLINGS = ('preferences', 'family-siblings', 0)
AUTOLOAD = ('behavior', 'autoload', 0)
SPELLCHECK = ('behavior', 'spellcheck', 0)
BETAWARN = ('behavior', 'betawarn', 0)
WELCOME = ('behavior', 'welcome', 1)
DATE_FORMAT = ('preferences', 'date-format', 1)
DONT_ASK = ('interface', 'dont-ask', 0)
RELEDITBTN = ('interface', 'releditbtn', 0)
@@ -188,8 +186,6 @@ default_value = {
FAMILY_SIBLINGS : True,
AUTOLOAD : False,
SPELLCHECK : False,
BETAWARN : False,
WELCOME : 100,
DATE_FORMAT : 0,
DONT_ASK : False,
RELEDITBTN : False,

@@ -159,9 +159,9 @@ class GrampletWindow(ManagedWindow.ManagedWindow):
self.window.show()
def handle_response(self, object, response):
if response == gtk.RESPONSE_CLOSE:
if response in [gtk.RESPONSE_CLOSE, gtk.STOCK_CLOSE]:
self.close()
else:
elif response == gtk.RESPONSE_HELP:
# translated name:
GrampsDisplay.help('gramplet', WIKI_HELP_PAGE,
self.gramplet.tname.replace(" ", "_"))

@@ -419,7 +419,6 @@ class PersonView(PageView.PersonNavView):
is no need to store the database, since we will get the value
from self.state.db
"""
self.build_columns()
self.setup_filter()
self.db = db
db.connect('person-add', self.person_added)

@@ -274,7 +274,7 @@ class DbManager(CLIDbManager):
if parent:
self.top.set_transient_for(parent)
self.connect = self.glade.get_widget('ok')
self.connect = self.glade.get_widget('connect')
self.cancel = self.glade.get_widget('cancel')
self.new = self.glade.get_widget('new')
self.remove = self.glade.get_widget('remove')
@@ -303,6 +303,7 @@ class DbManager(CLIDbManager):
self.top.drag_dest_set(gtk.DEST_DEFAULT_ALL, ddtargets, ACTION_COPY)
self.remove.connect('clicked', self.__remove_db)
self.connect.connect('clicked', self.__load_selected)
self.new.connect('clicked', self.__new_db)
self.rename.connect('clicked', self.__rename_db)
self.repair.connect('clicked', self.__repair_db)
@@ -327,7 +328,7 @@ class DbManager(CLIDbManager):
return self.__load_selected()
return False
def __load_selected(self):
def __load_selected(self, obj=None):
"""
Load the selected family tree if possible, return True
if ok, and set RESPONSE_OK

@@ -6,8 +6,8 @@ pkgdata_PYTHON = \
_AllNotes.py\
_HasIdOf.py\
_HasMarkerOf.py\
_HasNoteMatchingSubstringOf.py\
_HasNoteRegexp.py\
_MatchesSubstringOf.py\
_MatchesRegexpOf.py\
_HasNote.py\
_HasReferenceCountOf.py\
_MatchesFilter.py\

@@ -1,45 +1,63 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2002-2006 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# 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$
#-------------------------------------------------------------------------
#
# Standard Python modules
#
#-------------------------------------------------------------------------
from gettext import gettext as _
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
from Filters.Rules._HasNoteRegexBase import HasNoteRegexBase
#-------------------------------------------------------------------------
# "Repos having notes that contain a substring"
#-------------------------------------------------------------------------
class HasNoteRegexp(HasNoteRegexBase):
name = _('Notes having notes '
'containing <regular expression>')
description = _("Matches notes whose notes contain text "
"matching a regular expression")
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2002-2006 Donald N. Allingham
# Copyright (C) 2008 Brian G. Matherly
#
# 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: _HasNoteRegexp.py 9912 2008-01-22 09:17:46Z acraphae $
#-------------------------------------------------------------------------
#
# Standard Python modules
#
#-------------------------------------------------------------------------
import re
from gettext import gettext as _
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
from Filters.Rules import Rule
#-------------------------------------------------------------------------
# "Repos having notes that contain a substring"
#-------------------------------------------------------------------------
class MatchesRegexpOf(Rule):
labels = [ _('Regular expression:')]
name = _('Notes containing <regular expression>')
description = _("Matches notes who contain text "
"matching a regular expression")
category = _('General filters')
def __init__(self, list):
Rule.__init__(self, list)
try:
self.match = re.compile(list[0], re.I|re.U|re.L)
except:
self.match = re.compile('')
def apply(self, db, note):
""" Apply the filter """
text = unicode(note.get())
if self.match.match(text) != None:
return True
return False

@@ -2,6 +2,7 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2002-2006 Donald N. Allingham
# Copyright (C) 2008 Brian G. Matherly
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -32,14 +33,23 @@ from gettext import gettext as _
# GRAMPS modules
#
#-------------------------------------------------------------------------
from Filters.Rules._HasNoteSubstrBase import HasNoteSubstrBase
from Filters.Rules import Rule
#-------------------------------------------------------------------------
# "Events having notes that contain a substring"
#-------------------------------------------------------------------------
class HasNoteMatchingSubstringOf(HasNoteSubstrBase):
class MatchesSubstringOf(Rule):
"""Notes having notes containing <subtring>"""
name = _('Notes having notes containing <substring>')
description = _("Matches notes whose notes contain text "
labels = [ _('Substring:')]
name = _('Notes containing <substring>')
description = _("Matches notes who contain text "
"matching a substring")
category = _('General filters')
def apply(self, db, note):
""" Apply the filter """
text = unicode(note.get())
if text.upper().find(self.list[0].upper()) != -1:
return True
return False

@@ -29,8 +29,8 @@ from _AllNotes import AllNotes
from _HasIdOf import HasIdOf
from _HasMarkerOf import HasMarkerOf
from _RegExpIdOf import RegExpIdOf
from _HasNoteRegexp import HasNoteRegexp
from _HasNoteMatchingSubstringOf import HasNoteMatchingSubstringOf
from _MatchesRegexpOf import MatchesRegexpOf
from _MatchesSubstringOf import MatchesSubstringOf
from _HasReferenceCountOf import HasReferenceCountOf
from _NotePrivate import NotePrivate
from _MatchesFilter import MatchesFilter
@@ -42,8 +42,8 @@ editor_rule_list = [
HasMarkerOf,
RegExpIdOf,
HasNote,
HasNoteRegexp,
HasNoteMatchingSubstringOf,
MatchesRegexpOf,
MatchesSubstringOf,
HasReferenceCountOf,
NotePrivate,
MatchesFilter,

@@ -81,6 +81,8 @@ class EventSidebarFilter(SidebarFilter):
def create_widget(self):
cell = gtk.CellRendererText()
cell.set_property('width', self._FILTER_WIDTH)
cell.set_property('ellipsize', self._FILTER_ELLIPSIZE)
self.generic.pack_start(cell, True)
self.generic.add_attribute(cell, 'text', 0)
self.on_filters_changed('Event')

@@ -102,6 +102,8 @@ class FamilySidebarFilter(SidebarFilter):
def create_widget(self):
cell = gtk.CellRendererText()
cell.set_property('width', self._FILTER_WIDTH)
cell.set_property('ellipsize', self._FILTER_ELLIPSIZE)
self.generic.pack_start(cell, True)
self.generic.add_attribute(cell, 'text', 0)
self.on_filters_changed('Family')

@@ -71,6 +71,8 @@ class MediaSidebarFilter(SidebarFilter):
def create_widget(self):
cell = gtk.CellRendererText()
cell.set_property('width', self._FILTER_WIDTH)
cell.set_property('ellipsize', self._FILTER_ELLIPSIZE)
self.generic.pack_start(cell, True)
self.generic.add_attribute(cell, 'text', 0)
self.on_filters_changed('MediaObject')

@@ -75,6 +75,8 @@ class NoteSidebarFilter(SidebarFilter):
def create_widget(self):
cell = gtk.CellRendererText()
cell.set_property('width', self._FILTER_WIDTH)
cell.set_property('ellipsize', self._FILTER_ELLIPSIZE)
self.generic.pack_start(cell, True)
self.generic.add_attribute(cell, 'text', 0)
self.on_filters_changed('Note')

@@ -106,6 +106,8 @@ class PersonSidebarFilter(SidebarFilter):
def create_widget(self):
cell = gtk.CellRendererText()
cell.set_property('width', self._FILTER_WIDTH)
cell.set_property('ellipsize', self._FILTER_ELLIPSIZE)
self.generic.pack_start(cell, True)
self.generic.add_attribute(cell, 'text', 0)
self.on_filters_changed('Person')

@@ -72,6 +72,8 @@ class PlaceSidebarFilter(SidebarFilter):
def create_widget(self):
cell = gtk.CellRendererText()
cell.set_property('width', self._FILTER_WIDTH)
cell.set_property('ellipsize', self._FILTER_ELLIPSIZE)
self.generic.pack_start(cell, True)
self.generic.add_attribute(cell, 'text', 0)
self.on_filters_changed('Place')

@@ -81,6 +81,8 @@ class RepoSidebarFilter(SidebarFilter):
def create_widget(self):
cell = gtk.CellRendererText()
cell.set_property('width', self._FILTER_WIDTH)
cell.set_property('ellipsize', self._FILTER_ELLIPSIZE)
self.generic.pack_start(cell, True)
self.generic.add_attribute(cell, 'text', 0)
self.on_filters_changed('Repository')

@@ -22,6 +22,8 @@
from gettext import gettext as _
import gtk
import pango
import GrampsWidgets
import Config
@@ -29,6 +31,8 @@ _RETURN = gtk.gdk.keyval_from_name("Return")
_KP_ENTER = gtk.gdk.keyval_from_name("KP_Enter")
class SidebarFilter:
_FILTER_WIDTH = 200
_FILTER_ELLIPSIZE = pango.ELLIPSIZE_END
def __init__(self, dbstate, uistate):
self.position = 1

@@ -69,6 +69,8 @@ class SourceSidebarFilter(SidebarFilter):
def create_widget(self):
cell = gtk.CellRendererText()
cell.set_property('width', self._FILTER_WIDTH)
cell.set_property('ellipsize', self._FILTER_ELLIPSIZE)
self.generic.pack_start(cell, True)
self.generic.add_attribute(cell, 'text', 0)
self.on_filters_changed('Source')

@@ -165,10 +165,6 @@ MIME_MAP = {
'text' : 'text/plain', 'w8bn' : 'application/msword',
'wav' : 'audio/x-wav', 'mov' : 'video/quicktime',
}
EVENT_FAMILY_STR = _("%(event_name)s of %(family)s")
EVENT_PERSON_STR = _("%(event_name)s of %(person)s")
FTW_BAD_PLACE = [
gen.lib.EventType.OCCUPATION,
@@ -1497,7 +1493,6 @@ class GedcomParser(UpdateCallback):
self.__parse_level(sub_state, self.event_parse_tbl, self.__undefined)
person_event_name(event, state.person)
self.dbase.commit_event(event, self.trans)
event_ref.ref = event.handle
state.person.add_event_ref(event_ref)
@@ -1667,7 +1662,6 @@ class GedcomParser(UpdateCallback):
self.__parse_level(sub_state, self.event_parse_tbl, self.__undefined)
person_event_name(event, state.person)
self.dbase.add_event(event, self.trans)
event_ref.ref = event.handle
state.person.add_event_ref(event_ref)
@@ -2488,7 +2482,6 @@ class GedcomParser(UpdateCallback):
else:
state.family.type.set(gen.lib.FamilyRelType.MARRIED)
family_event_name(event, state.family, self.dbase)
self.dbase.commit_event(event, self.trans)
event_ref.ref = event.handle
state.family.add_event_ref(event_ref)
@@ -2520,8 +2513,6 @@ class GedcomParser(UpdateCallback):
self.__parse_level(sub_state, self.event_parse_tbl, self.__undefined)
family_event_name(event, state.family, self.dbase)
self.dbase.commit_event(event, self.trans)
event_ref.ref = event.handle
state.family.add_event_ref(event_ref)
@@ -4365,8 +4356,6 @@ class GedcomParser(UpdateCallback):
if description and description != 'Y':
event.set_description(description)
else:
person_event_name(event, state.person)
self.dbase.add_event(event, self.trans)
sub_state = GedcomUtils.CurrentState()
@@ -4389,8 +4378,6 @@ class GedcomParser(UpdateCallback):
event.set_type(event_type)
if description and description != 'Y':
event.set_description(description)
else:
family_event_name(event, state.family, self.dbase)
self.dbase.add_event(event, self.trans)
@@ -4402,9 +4389,7 @@ class GedcomParser(UpdateCallback):
self.__parse_level(sub_state, event_map, self.__undefined)
family_event_name(event, state.family, self.dbase)
self.dbase.commit_event(event, self.trans)
event_ref.set_reference_handle(event.handle)
return event_ref
@@ -4438,25 +4423,4 @@ class GedcomParser(UpdateCallback):
sref.set_reference_handle(self.def_src.handle)
obj.add_source_reference(sref)
#-------------------------------------------------------------------------
#
# Support functions
#
#-------------------------------------------------------------------------
def person_event_name(event, person):
ename = str(event.get_type())
if not event.get_description() and ename:
text = EVENT_PERSON_STR % {
'event_name' : ename,
'person' : name_displayer.display(person),
}
event.set_description(text)
def family_event_name(event, family, dbase):
if not event.get_description() or event.get_description() == "Y":
text = EVENT_FAMILY_STR % {
'event_name' : str(event.get_type()),
'family' : Utils.family_name(family, dbase),
}
event.set_description(text)
#===eof===

@@ -1416,6 +1416,24 @@ class GedcomWriter(BasicUtils.UpdateCallback):
self.__writeln(level+2, 'LATI', latitude)
self.__writeln(level+2, 'LONG', longitude)
# The Gedcom standard shows that an optional address structure can
# be written out in the event detail.
# http://homepages.rootsweb.com/~pmcbride/gedcom/55gcch2.htm#EVENT_DETAIL
location = place.get_main_location()
if location:
if location.get_street():
self.__writeln(level, "ADDR", location.get_street())
if location.get_city():
self.__writeln(level + 1, 'CITY', location.get_city())
if location.get_state():
self.__writeln(level + 1, 'STAE', location.get_state())
if location.get_postal_code():
self.__writeln(level + 1, 'POST', location.get_postal_code())
if location.get_country():
self.__writeln(level + 1, 'CTRY', location.get_country())
if location.get_phone():
self.__writeln(level, 'PHON', location.get_phone())
#-------------------------------------------------------------------------
#
#

@@ -286,20 +286,20 @@ class MergePeopleUI(ManagedWindow.ManagedWindow):
ManagedWindow.ManagedWindow.__init__(self, uistate, [], self.__class__)
glade = glade.XML(const.MERGE_GLADE, 'merge_people')
window = glade.get_widget('merge_people')
glade_xml = glade.XML(const.MERGE_GLADE, 'merge_people')
window = glade_xml.get_widget('merge_people')
self.set_window(window, glade.get_widget('title'), _("Merge People"))
self.set_window(window, glade_xml.get_widget('title'), _("Merge People"))
p1 = glade.get_widget('person1')
p2 = glade.get_widget('person2')
p1 = glade_xml.get_widget('person1')
p2 = glade_xml.get_widget('person2')
n1 = name_of(person1)
n2 = name_of(person2)
p1.set_label(n1)
p2.set_label(n2)
glade.get_widget('help').connect('clicked', self.help)
glade_xml.get_widget('help').connect('clicked', self.help)
ret = gtk.RESPONSE_HELP
while ret == gtk.RESPONSE_HELP:

@@ -801,7 +801,7 @@ class ListView(BookMarkView):
# set the search column to be the sorted column
search_col = self.column_order()[data][1]
self.list.set_search_column(search_col)
def build_columns(self):
for column in self.columns:
self.list.remove_column(column)
@@ -830,7 +830,6 @@ class ListView(BookMarkView):
def build_tree(self):
if self.active:
if Config.get(Config.FILTER):
filter_info = (True, self.generic_filter)
else:
@@ -839,6 +838,7 @@ class ListView(BookMarkView):
self.model = self.make_model(self.dbstate.db, self.sort_col,
search=filter_info)
self.list.set_model(self.model)
self.build_columns()
if const.USE_TIPS and self.model.tooltip_column != None:
self.tooltips = TreeTips.TreeTips(
@@ -881,8 +881,6 @@ class ListView(BookMarkView):
def change_db(self, db):
for sig in self.signal_map:
db.connect(sig, self.signal_map[sig])
self.build_columns()
self.bookmarks.update_bookmarks(self.get_bookmarks())
if self.active:
self.build_tree()

@@ -161,6 +161,7 @@ class CommandLineTool:
self.database = database
self.category = category
self.option_class = option_class(name)
self.option_class.load_previous_values()
self.show = options_str_dict.pop('show',None)
self.options_str_dict = options_str_dict
self.init_options(noopt)

@@ -135,12 +135,12 @@ class CommandLineReport:
}
self.options_help = {
'of' : ["=filename","Output file name. MANDATORY"],
'off' : ["=format","Output file format."],
'style' : ["=name","Style name."],
'papers' : ["=name","Paper size name."],
'papero' : ["=num","Paper orientation number."],
'template' : ["=name","Template name (HTML only)."],
'of' : ["=filename", "Output file name. MANDATORY", "", ""],
'off' : ["=format", "Output file format.", "", ""],
'style' : ["=name", "Style name.", "", ""],
'papers' : ["=name", "Paper size name.", "", ""],
'papero' : ["=num", "Paper orientation number.", "", ""],
'template' : ["=name", "Template name (HTML only).", "", ""],
}
if noopt:
@@ -157,10 +157,9 @@ class CommandLineReport:
if self.format is None:
# Pick the first one as the default.
self.format = PluginUtils.textdoc_list[0][1]
self.options_help['off'].append(
self.options_help['off'][2] = \
[ item[7] for item in PluginUtils.textdoc_list ]
)
self.options_help['off'].append(False)
self.options_help['off'][3] = False
elif self.category == CATEGORY_DRAW:
for item in PluginUtils.drawdoc_list:
if item[6] == self.options_dict['off']:
@@ -168,10 +167,9 @@ class CommandLineReport:
if self.format is None:
# Pick the first one as the default.
self.format = PluginUtils.drawdoc_list[0][1]
self.options_help['off'].append(
self.options_help['off'][2] = \
[ item[6] for item in PluginUtils.drawdoc_list ]
)
self.options_help['off'].append(False)
self.options_help['off'][3] = False
elif self.category == CATEGORY_BOOK:
for item in PluginUtils.bookdoc_list:
if item[6] == self.options_dict['off']:
@@ -179,10 +177,9 @@ class CommandLineReport:
if self.format is None:
# Pick the first one as the default.
self.format = PluginUtils.bookdoc_list[0][1]
self.options_help['off'].append(
self.options_help['off'][2] = \
[ item[6] for item in PluginUtils.bookdoc_list ]
)
self.options_help['off'].append(False)
self.options_help['off'][3] = False
else:
self.format = None
@@ -190,20 +187,20 @@ class CommandLineReport:
if paper.get_name() == self.options_dict['papers']:
self.paper = paper
self.option_class.handler.set_paper(self.paper)
self.options_help['papers'].append(
self.options_help['papers'][2] = \
[ paper.get_name() for paper in paper_sizes
if paper.get_name() != _("Custom Size") ] )
self.options_help['papers'].append(False)
if paper.get_name() != _("Custom Size") ]
self.options_help['papers'][3] = False
self.orien = self.options_dict['papero']
self.options_help['papero'].append([
self.options_help['papero'][2] = [
"%d\tPortrait" % BaseDoc.PAPER_PORTRAIT,
"%d\tLandscape" % BaseDoc.PAPER_LANDSCAPE ] )
self.options_help['papero'].append(False)
"%d\tLandscape" % BaseDoc.PAPER_LANDSCAPE ]
self.options_help['papero'][3] = False
self.template_name = self.options_dict['template']
self.options_help['template'].append(os.path.join(const.USER_HOME,
"whatever_name"))
self.options_help['template'][2] = os.path.join(const.USER_HOME,
"whatever_name")
if self.category in (CATEGORY_TEXT, CATEGORY_DRAW):
default_style = BaseDoc.StyleSheet()
@@ -217,8 +214,8 @@ class CommandLineReport:
style_name = self.option_class.handler.get_default_stylesheet_name()
self.selected_style = self.style_list.get_style_sheet(style_name)
self.options_help['style'].append(self.style_list.get_style_names())
self.options_help['style'].append(False)
self.options_help['style'][2] = self.style_list.get_style_names()
self.options_help['style'][3] = False
def init_report_options(self):
"""
@@ -291,12 +288,17 @@ class CommandLineReport:
elif isinstance(option, PluginUtils.StringOption):
self.options_help[name].append("Any text")
self.options_help[name].append(False)
elif isinstance(option, PluginUtils.TextOption):
self.options_help[name].append("Any text")
self.options_help[name].append(False)
elif isinstance(option, PluginUtils.EnumeratedListOption):
ilist = []
for (value, description) in option.get_items():
ilist.append("%s\t%s" % (value, description))
self.options_help[name].append(ilist)
self.options_help[name].append(False)
else:
print "Unknown option: ", option
def parse_options(self):
"""

@@ -51,6 +51,7 @@ from _Constants import CATEGORY_GRAPHVIZ
from _ReportDialog import ReportDialog
from _PaperMenu import PaperFrame
from PluginUtils import NumberOption, EnumeratedListOption, TextOption
from QuestionDialog import WarningDialog
#-------------------------------------------------------------------------------
#
@@ -109,8 +110,8 @@ class GVDocBase(BaseDoc.BaseDoc,BaseDoc.GVDoc):
inherit from this class will only need to implement the close function.
The close function will generate the actual file of the appropriate type.
"""
def __init__(self, options,paper_style):
BaseDoc.BaseDoc.__init__(self,None,paper_style,None)
def __init__(self, options, paper_style):
BaseDoc.BaseDoc.__init__(self, None, paper_style, None)
self.options = options.handler.options_dict
self.dot = StringIO()
@@ -131,31 +132,23 @@ class GVDocBase(BaseDoc.BaseDoc,BaseDoc.GVDoc):
self.vpages = self.options['v_pages' ]
paper_size = paper_style.get_size()
pheight = paper_size.get_height_inches()
pwidth = paper_size.get_width_inches()
# graph size
if self.paper.get_orientation() == BaseDoc.PAPER_LANDSCAPE:
rotate = 90
sizew = ( paper_size.get_height() -
self.paper.get_top_margin() -
self.paper.get_bottom_margin() ) / 2.54
sizeh = ( paper_size.get_width() -
self.paper.get_left_margin() -
self.paper.get_right_margin() ) / 2.54
else:
rotate = 0
sizew = ( paper_size.get_width() -
self.paper.get_left_margin() -
self.paper.get_right_margin() ) / 2.54
sizeh = ( paper_size.get_height() -
self.paper.get_top_margin() -
self.paper.get_bottom_margin() ) / 2.54
sizew = ( paper_size.get_width() -
self.paper.get_left_margin() -
self.paper.get_right_margin() ) / 2.54
sizeh = ( paper_size.get_height() -
self.paper.get_top_margin() -
self.paper.get_bottom_margin() ) / 2.54
pheight = paper_size.get_height_inches()
pwidth = paper_size.get_width_inches()
xmargin = self.paper.get_left_margin() / 2.54
ymargin = self.paper.get_top_margin() / 2.54
sizew = sizew * self.hpages
sizeh = sizeh * self.vpages
self.write( 'digraph GRAMPS_graph\n' )
self.write( '{\n' )
self.write( ' bgcolor=white;\n' )
@@ -172,9 +165,9 @@ class GVDocBase(BaseDoc.BaseDoc,BaseDoc.GVDoc):
self.write( ' rankdir="%s";\n' % self.rankdir )
self.write( ' ranksep="%.2f";\n' % self.ranksep )
self.write( ' ratio="%s";\n' % self.ratio )
self.write( ' rotate="%d";\n' % rotate )
self.write( ' searchsize="100";\n' )
self.write( ' size="%3.2f,%3.2f"; \n' % (sizew, sizeh) )
self.write( ' margin="%3.2f,%3.2f"; \n' % (xmargin, ymargin))
self.write( ' splines="true";\n' )
self.write( '\n' )
self.write( ' edge [len=0.5 style=solid arrowhead=none '
@@ -321,6 +314,13 @@ class GVDotDoc(GVDocBase):
#
#-------------------------------------------------------------------------------
class GVPsDoc(GVDocBase):
def __init__(self, options, paper_style):
# DPI must always be 72 for PDF.
# GV documentation says dpi is only for image formats.
options.handler.options_dict['dpi'] = 72
GVDocBase.__init__(self, options, paper_style)
def close(self):
GVDocBase.close(self)
@@ -495,6 +495,13 @@ class GVGifDoc(GVDocBase):
#
#-------------------------------------------------------------------------------
class GVPdfGvDoc(GVDocBase):
def __init__(self, options, paper_style):
# DPI must always be 72 for PDF.
# GV documentation says dpi is only for image formats.
options.handler.options_dict['dpi'] = 72
GVDocBase.__init__(self, options, paper_style)
def close(self):
GVDocBase.close(self)
@@ -518,13 +525,19 @@ class GVPdfGvDoc(GVDocBase):
app = Mime.get_application("application/pdf")
Utils.launch(app[0], self.filename)
#-------------------------------------------------------------------------------
#
# GVPdfGsDoc
#
#-------------------------------------------------------------------------------
class GVPdfGsDoc(GVDocBase):
def __init__(self, options, paper_style):
# DPI must always be 72 for PDF.
# GV documentation says dpi is only for image formats.
options.handler.options_dict['dpi'] = 72
GVDocBase.__init__(self, options, paper_style)
def close(self):
GVDocBase.close(self)
@@ -563,7 +576,7 @@ class GVPdfGsDoc(GVDocBase):
if self.print_req:
app = Mime.get_application("application/pdf")
Utils.launch(app[0], self.filename)
#-------------------------------------------------------------------------------
#
# Various Graphviz formats.
@@ -790,10 +803,12 @@ class GraphvizReportDialog(ReportDialog):
self.options.add_menu_option(category, "ratio", aspect_ratio)
dpi = NumberOption(_("DPI"), 75, 20, 1200)
# Remember dpi until later margins check
self.dpi = dpi
dpi.set_help(_( "Dots per inch. When creating images such as "
".gif or .png files for the web, try numbers "
"such as 75 or 100 DPI. When printing, try"
"300 or 600 DPI."))
"such as 100 or 300 DPI. When creating postscript or "
"pdf files, use 72 DPI."))
self.options.add_menu_option(category, "dpi", dpi)
nodesep = NumberOption(_("Node spacing"), 0.20, 0.01, 5.00, 0.01)
@@ -939,10 +954,6 @@ class GraphvizReportDialog(ReportDialog):
the output file name before doing anything else. If there is
a file name, gather the options and create the report."""
# Is there a filename? This should also test file permissions, etc.
if not self.parse_target_frame():
self.window.run()
# Preparation
self.parse_format_frame()
self.parse_user_options()
@@ -952,6 +963,52 @@ class GraphvizReportDialog(ReportDialog):
self.options.handler.set_orientation(self.paper_frame.get_orientation())
self.options.handler.set_margins(self.paper_frame.get_paper_margins())
self.options.handler.set_custom_paper_size(self.paper_frame.get_custom_paper_size())
#=====================================================================
# First check for small margins
# Warn if margins less than 0.5", which can generate wrong ouput:
# pdf via Graphviz generates pdf errors
# pdf via Ghostscrip generetes 4 pages is stead of one,
# which are without errors, but only one was wanted.
# If all margins are >1.0" then graphs are OK, but some graphs are
# offset a lot
# Note margins are always in cm.
if self.paper_frame.get_paper_metric():
warn_marg = _("1.3 cm.")
else:
warn_marg = _("0.5 in.")
pm_l = self.paper_frame.get_paper_margins()[0] / 2.54
pm_r = self.paper_frame.get_paper_margins()[1] / 2.54
pm_t = self.paper_frame.get_paper_margins()[2] / 2.54
pm_b = self.paper_frame.get_paper_margins()[3] / 2.54
if ((pm_l < 0.5 and pm_r < 0.5) or (pm_t < 0.5 and pm_b < 0.5)) and \
(self.format_menu.get_clname() == 'gvpdf'):
warn_text1 = _("Two or more opposite paper margins are less than ")
warn_text2 = _("This can cause incorrect and/or partial graphs.")
WarningDialog(warn_text1 + warn_marg, warn_text2)
if ((pm_l < 0.5 and pm_r < 0.5) or (pm_t < 0.5 and pm_b < 0.5)) and \
((self.format_menu.get_clname() == 'gspdf') or \
(self.format_menu.get_clname() == 'ps') or \
(self.format_menu.get_clname() == 'dot')):
warn_text1 = _("Two or more opposite paper margins are less than ")
warn_text2 = _("More than expected number of pages can be generated.")
WarningDialog(warn_text1 + warn_marg, warn_text2)
if ((self.h_pages.get_value() > 1) or (self.h_pages.get_value() > 1)) and \
not ((self.format_menu.get_clname() == 'gspdf') or \
(self.format_menu.get_clname() == 'ps') or \
(self.format_menu.get_clname() == 'dot')):
warn_text1 = _("You have used more than one page as output.")
warn_text2 = _("This can cause incorrect and/or partial graphs.")
WarningDialog(warn_text1, warn_text2)
#======================================================================
# Is there a filename? This should also test file permissions, etc.
if not self.parse_target_frame():
self.window.run()
# Create the output document.
self.make_document()

@@ -220,16 +220,18 @@ class PaperFrame(gtk.HBox):
if checkbox.get_active():
self.paper_unit = 'cm'
self.paper_unit_multiplier = 1.0
paper_unit_text = _("cm")
else:
self.paper_unit = 'in.'
self.paper_unit_multiplier = 2.54
paper_unit_text = _("in.")
self.lunits1.set_text(self.paper_unit)
self.lunits2.set_text(self.paper_unit)
self.lunits3.set_text(self.paper_unit)
self.lunits4.set_text(self.paper_unit)
self.lunits5.set_text(self.paper_unit)
self.lunits6.set_text(self.paper_unit)
self.lunits1.set_text(paper_unit_text)
self.lunits2.set_text(paper_unit_text)
self.lunits3.set_text(paper_unit_text)
self.lunits4.set_text(paper_unit_text)
self.lunits5.set_text(paper_unit_text)
self.lunits6.set_text(paper_unit_text)
if self.paper_unit == 'cm':
self.pwidth.set_text("%.2f" % paper_size.get_width())
@@ -259,8 +261,8 @@ class PaperFrame(gtk.HBox):
# How can we distinguish custom size though?
if papername == _('Custom Size'):
try:
h = float(unicode(self.pheight.get_text()))
w = float(unicode(self.pwidth.get_text()))
h = float(unicode(self.pheight.get_text().replace(",",".")))
w = float(unicode(self.pwidth.get_text().replace(",",".")))
if h <= 1.0 or w <= 1.0:
papersize.set_height(29.7)
@@ -271,7 +273,7 @@ class PaperFrame(gtk.HBox):
except:
papersize.set_height(29.7)
papersize.set_width(21.0)
1.30
return papersize, papername
def get_paper_margins(self):
@@ -285,10 +287,9 @@ class PaperFrame(gtk.HBox):
paper_margins.append(unicode(self.rmargin.get_text()))
paper_margins.append(unicode(self.tmargin.get_text()))
paper_margins.append(unicode(self.bmargin.get_text()))
for i, margin in enumerate(paper_margins):
try:
paper_margins[i] = float(margin)
paper_margins[i] = float(margin.replace(",","."))
paper_margins[i] = paper_margins[i] * self.paper_unit_multiplier
paper_margins[i] = max(paper_margins[i], 0)
except:
@@ -297,8 +298,8 @@ class PaperFrame(gtk.HBox):
return paper_margins
def get_custom_paper_size(self):
width = float(self.pwidth.get_text() ) * self.paper_unit_multiplier
height = float(self.pheight.get_text()) * self.paper_unit_multiplier
width = float(self.pwidth.get_text().replace(",",".")) * self.paper_unit_multiplier
height = float(self.pheight.get_text().replace(",",".")) * self.paper_unit_multiplier
paper_size = []
paper_size.append(max(width, 1.0))

@@ -527,7 +527,7 @@ died_no_date_no_place = [
],
},
[
_(""),
"",
_("Died (age %(age)d years)."),
_("Died (age %(age)d months)."),
_("Died (age %(age)d days)."),

@@ -2,7 +2,8 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2005 Donald N. Allingham
# Copyright (C) 2007 Brian G. Matherly
# Copyright (C) 2007-2008 Brian G. Matherly
# Copyright (C) 2008 Peter Landgren
#
# 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
@@ -202,8 +203,6 @@ class StyleEditor:
ManagedWindow.set_titles( self.window,
self.top.get_widget('title'),
_('Style editor'))
self.first = 1
titles = [(_('Paragraph'), 0, 130)]
self.plist = ListModel.ListModel(self.top.get_widget("ptree"), titles,
@@ -270,24 +269,32 @@ class StyleEditor:
self.top.get_widget("bborder").set_active(p.get_bottom_border())
self.fg_color = font.get_color()
c = Color(self.fg_color[0], self.fg_color[1], self.fg_color[2])
c = Color(self.fg_color[0] << 8,
self.fg_color[1] << 8,
self.fg_color[2] << 8)
self.top.get_widget("color").set_color(c)
self.top.get_widget('color_code').set_text("#%02X%02X%02X" % self.fg_color)
self.top.get_widget('color_code').set_text(
"#%02X%02X%02X" % self.fg_color)
self.bg_color = p.get_background_color()
c = Color(self.bg_color[0], self.bg_color[1], self.bg_color[2])
c = Color(self.bg_color[0] << 8,
self.bg_color[1] << 8,
self.bg_color[2] << 8)
self.top.get_widget("bgcolor").set_color(c)
self.top.get_widget('bgcolor_code').set_text("#%02X%02X%02X" % self.bg_color)
self.top.get_widget('bgcolor_code').set_text(
"#%02X%02X%02X" % self.bg_color)
def bg_color_set(self, x):
c = x.get_color()
self.bg_color = (c.red >> 8, c.green >> 8, c.blue >> 8)
self.top.get_widget('bgcolor_code').set_text("#%02X%02X%02X" % self.bg_color)
self.top.get_widget('bgcolor_code').set_text(
"#%02X%02X%02X" % self.bg_color)
def fg_color_set(self, x):
c = x.get_color()
self.fg_color = (c.red >> 8, c.green >> 8, c.blue >> 8)
self.top.get_widget('color_code').set_text("#%02X%02X%02X" % self.fg_color)
self.top.get_widget('color_code').set_text(
"#%02X%02X%02X" % self.fg_color)
def save_paragraph(self):
"""Saves the current paragraph displayed on the dialog"""
@@ -344,13 +351,13 @@ class StyleEditor:
def change_display(self, obj):
"""Called when the paragraph selection has been changed. Saves the
old paragraph, then draws the newly selected paragraph"""
# Don't save until current_name is defined
# If it's defined, save under the current paragraph name
if self.current_name:
self.save_paragraph()
# Then change to new paragraph
objs = self.plist.get_selected_objects()
store, node = self.plist.get_selected()
self.current_name = store.get_value(node, 0)
if self.first == 0:
self.save_paragraph()
else:
self.first = 0
self.current_p = objs[0]
self.draw()

@@ -36,7 +36,7 @@ body {
color:#7D5925;
margin:0;
padding:0;
background:url(images/NWeb_Certificate_Bkgd.png) #000 repeat;
background:url(images/NWeb_Mainz_Bkgd.png) #000 repeat;
}
div {
margin:0;
@@ -53,7 +53,7 @@ img {
width:900px;
margin:0 auto;
padding-bottom:.5em;
background:url(images/NWeb_Certificate_Mid.png) #FFF2C6 repeat;
background:url(images/NWeb_Mainz_Mid.png) #FFF2C6 repeat;
}
.content div.snapshot {
margin:0;
@@ -152,7 +152,7 @@ a:visited {
width:900px;
margin:0 auto;
padding:5em 0 2px 0;
background:url(images/NWeb_Certificate_Header.png) no-repeat top;
background:url(images/NWeb_Mainz_Header.png) no-repeat top;
}
#SiteTitle {
color:#7D5925;
@@ -181,7 +181,7 @@ a:visited {
width:900px;
margin:0 auto;
padding:0;
background:url(images/NWeb_Certificate_MidLight.png) #FFF2C6;
background:url(images/NWeb_Mainz_MidLight.png) #FFF2C6;
}
#Navigation ol {
list-style:none;
@@ -230,7 +230,7 @@ a:visited {
margin:0 auto;
padding:0;
clear:both;
background:url(images/NWeb_Certificate_MidLight.png) #FFF2C6;
background:url(images/NWeb_Mainz_MidLight.png) #FFF2C6;
border-top:dashed 1px #7D5925;
}
#user_footer {
@@ -346,7 +346,7 @@ table#SortByName thead tr th.ColumnSurname a:after, table#SortByCount thead tr t
}
table.infolist tbody tr td.ColumnSurname {
padding:0;
background:url(images/NWeb_Certificate_MidLight.png) #FFF2C6 repeat;
background:url(images/NWeb_Mainz_MidLight.png) #FFF2C6 repeat;
}
table.infolist tbody tr td.ColumnSurname a {
padding:.1em 10px;
@@ -363,7 +363,7 @@ table.surname tbody tr:last-child td {
table.surname tbody tr td.ColumnName {
width:20%;
padding:0;
background:url(images/NWeb_Certificate_MidLight.png) #FFF2C6 repeat;
background:url(images/NWeb_Mainz_MidLight.png) #FFF2C6 repeat;
}
table.surname tbody tr td.ColumnName a {
display:block;
@@ -399,7 +399,7 @@ table.individuallist tbody tr td.ColumnSurname a:hover, table.individuallist tbo
}
table.individuallist tbody tr td.ColumnName {
padding:0;
background:url(images/NWeb_Certificate_MidLight.png) #FFF2C6 repeat;
background:url(images/NWeb_Mainz_MidLight.png) #FFF2C6 repeat;
}
table.individuallist tbody tr td.ColumnName a {
display:block;
@@ -473,7 +473,7 @@ table.individuallist tbody tr td.ColumnName a {
font-style:italic;
color:#FFF2C6;
text-decoration:none;
background:url(images/NWeb_Certificate_Bkgd.png) #7D5925 repeat;
background:url(images/NWeb_Mainz_Bkgd.png) #7D5925 repeat;
border:outset 3px #000;
}
#GalleryNav a:hover {
@@ -873,4 +873,4 @@ div#narrative {
margin:0 0 0 14px;
padding:0;
background:none;
}
}

@@ -1,7 +1,8 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2007 Zsolt Foldvari
# Copyright (C) 2007 Zsolt Foldvari
# Copyright (C) 2008 Brian G. Matherly
#
# 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
@@ -91,6 +92,7 @@ class PdfDoc(CairoDoc):
cr = pangocairo.CairoContext(cairo.Context(surface))
fontmap = pangocairo.cairo_font_map_get_default()
saved_resolution = fontmap.get_resolution()
fontmap.set_resolution(DPI)
pango_context = fontmap.create_context()
@@ -117,6 +119,10 @@ class PdfDoc(CairoDoc):
# close the surface (file)
surface.finish()
# Restore the resolution. On windows, Gramps UI fonts will be smaller
# if we don't restore the resolution.
fontmap.set_resolution(saved_resolution)
# load the result into an external viewer
if self.print_req:

@@ -814,6 +814,15 @@ class GrampsDbBase(Callback):
def find_from_handle(self, handle, transaction, class_type, dmap,
add_func):
"""
Find a object of class_type in the database from the passed handle.
If no object exists, a new object is added to the database.
@return: Returns a tuple, first the object, second a bool which is True
if the object is new
@rtype: tuple
"""
obj = class_type()
handle = str(handle)
new = True
@@ -840,6 +849,10 @@ class GrampsDbBase(Callback):
Find a Person in the database from the passed handle.
If no such Person exists, a new Person is added to the database.
@return: Returns a tuple, first the object, second a bool which is True
if the object is new
@rtype: tuple
"""
return self.find_from_handle(handle, transaction, Person,
self.person_map, self.add_person)
@@ -849,6 +862,10 @@ class GrampsDbBase(Callback):
Find a Source in the database from the passed handle.
If no such Source exists, a new Source is added to the database.
@return: Returns a tuple, first the object, second a bool which is True
if the object is new
@rtype: tuple
"""
return self.find_from_handle(handle, transaction, Source,
self.source_map, self.add_source)
@@ -858,6 +875,10 @@ class GrampsDbBase(Callback):
Find a Event in the database from the passed handle.
If no such Event exists, a new Event is added to the database.
@return: Returns a tuple, first the object, second a bool which is True
if the object is new
@rtype: tuple
"""
return self.find_from_handle(handle, transaction, Event,
self.event_map, self.add_event)
@@ -867,6 +888,10 @@ class GrampsDbBase(Callback):
Find a MediaObject in the database from the passed handle.
If no such MediaObject exists, a new Object is added to the database.
@return: Returns a tuple, first the object, second a bool which is True
if the object is new
@rtype: tuple
"""
return self.find_from_handle(handle, transaction, MediaObject,
self.media_map, self.add_object)
@@ -876,6 +901,10 @@ class GrampsDbBase(Callback):
Find a Place in the database from the passed handle.
If no such Place exists, a new Place is added to the database.
@return: Returns a tuple, first the object, second a bool which is True
if the object is new
@rtype: tuple
"""
return self.find_from_handle(handle, transaction, Place,
self.place_map, self.add_place)
@@ -885,6 +914,10 @@ class GrampsDbBase(Callback):
Find a Family in the database from the passed handle.
If no such Family exists, a new Family is added to the database.
@return: Returns a tuple, first the object, second a bool which is True
if the object is new
@rtype: tuple
"""
return self.find_from_handle(handle, transaction, Family,
self.family_map, self.add_family)
@@ -894,6 +927,10 @@ class GrampsDbBase(Callback):
Find a Repository in the database from the passed handle.
If no such Repository exists, a new Repository is added to the database.
@return: Returns a tuple, first the object, second a bool which is True
if the object is new
@rtype: tuple
"""
return self.find_from_handle(handle, transaction, Repository,
self.repository_map, self.add_repository)
@@ -903,6 +940,10 @@ class GrampsDbBase(Callback):
Find a Note in the database from the passed handle.
If no such Note exists, a new Note is added to the database.
@return: Returns a tuple, first the object, second a bool which is True
if the object is new
@rtype: tuple
"""
return self.find_from_handle(handle, transaction, Note,
self.note_map, self.add_note)

@@ -1493,6 +1493,15 @@ class GrampsDBDir(GrampsDbBase, UpdateCallback):
return None
def find_from_handle(self, handle, transaction, class_type, dmap, add_func):
"""
Find a object of class_type in the database from the passed handle.
If no object exists, a new object is added to the database.
@return: Returns a tuple, first the object, second a bool which is True
if the object is new
@rtype: tuple
"""
obj = class_type()
handle = str(handle)
new = True

@@ -67,7 +67,6 @@ class AttributeType(GrampsType):
(NATIONAL , _("National Origin"), "National Origin"),
(NUM_CHILD , _("Number of Children"), "Number of Children"),
(SSN , _("Social Security Number"), "Social Security Number"),
(NUM_CHILD , _("Number of Children"), "Number of Children"),
(NICKNAME , _("Nickname"), "Nickname"),
(CAUSE , _("Cause"), "Cause"),
(AGENCY , _("Agency"), "Agency"),

@@ -15883,13 +15883,13 @@ Very High</property>
</child>
<child>
<widget class="GtkButton" id="ok">
<widget class="GtkButton" id="connect">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="response_id">-5</property>
<property name="response_id">0</property>
<child>
<widget class="GtkAlignment" id="alignment8">

@@ -183,37 +183,11 @@ def register_stock_icons ():
factory.add (data[0], icon_set)
def build_user_paths():
""" check/make user-dirs on each Gramps session"""
for path in const.USER_DIRLIST:
if not os.path.isdir(path):
os.mkdir(path)
def _display_welcome_message():
"""
Display a welcome message to the user.
"""
if not Config.get(Config.BETAWARN):
from QuestionDialog import WarningDialog
WarningDialog(
_('Danger: This is unstable code!'),
_("This GRAMPS 3.0 Beta release is an early, experimental "
"peek at the future 3.0 release. This version is "
"not meant for normal usage. Use at your own risk.\n\n"
"This version may:\n"
"1) Work differently than you expect.\n"
"2) Fail to run at all.\n"
"3) Crash often.\n"
"4) Corrupt your data.\n"
"5) Save data in a format that is incompatible with the "
"official release.\n"
"\n<b>BACKUP</b> your existing databases "
"before opening them with this version, and make "
"sure to export your data to XML every now and then."))
Config.set(Config.AUTOLOAD, False)
# Config.set(Config.BETAWARN, True)
Config.set(Config.BETAWARN, Config.get(Config.BETAWARN))
#-------------------------------------------------------------------------
#
@@ -231,8 +205,7 @@ class Gramps:
def __init__(self, args):
stopload = False
try:
build_user_paths()
_display_welcome_message()
build_user_paths()
except OSError, msg:
ErrorDialog(_("Configuration error"), str(msg))
except Errors.GConfSchemaError, val:
@@ -286,5 +259,3 @@ class Gramps:
if Config.get(Config.USE_TIPS):
TipOfDay.TipOfDay(self.vm.uistate)

@@ -82,5 +82,5 @@ CLEANFILES = $(map_tile_images)\
world.topo.200407.3x3200x1600.jpg\
world.topo.200407.3x5400x2700.jpg
world.topo.200407%: mk_blue_marble.py
world.topo.200407: mk_blue_marble.py
python mk_blue_marble.py

@@ -643,7 +643,7 @@ class BookListDisplay:
if not the_iter:
return
data = self.blist.get_data(the_iter, [0])
self.booklist.delete_book(data[0])
self.booklist.delete_book(unicode(data[0]))
self.blist.remove(the_iter)
self.top.run()
@@ -896,7 +896,6 @@ class BookReportSelector(ManagedWindow.ManagedWindow):
self.track)
response = item_dialog.window.run()
if response == RESPONSE_OK:
_initialize_options(option_class, self.dbstate)
subject = _get_subject(option_class, self.db)
self.bk_model.model.set_value(the_iter, 2, subject)
self.book.set_item(row, item)
@@ -1182,6 +1181,10 @@ def cl_report(database, name, category, options_str_dict):
# Exit here if show option was given
if clr.show:
return
if not clr.options_dict.has_key('bookname'):
print "Please Specify a book name"
return
book_list = BookList('books.xml', database)
book_name = clr.options_dict['bookname']

@@ -28,7 +28,6 @@
#
#-------------------------------------------------------------------------
import os
from gettext import gettext as _
#-------------------------------------------------------------------------
#
@@ -50,7 +49,7 @@ import ManagedWindow
from QuestionDialog import OkDialog
from PluginUtils import Tool, register_tool
from TransUtils import sgettext as _
#-------------------------------------------------------------------------
#
# constants
@@ -64,7 +63,8 @@ prefix_list = [
"um", "una", "uno",
]
WIKI_HELP_PAGE = 'Gramps_3.0_Wiki_Manual_-_Tools'
WIKI_HELP_SEC = _('manual|Fix_Capitalization_of_Family_Names...')
#-------------------------------------------------------------------------
#
@@ -231,7 +231,7 @@ class ChangeNames(Tool.BatchTool, ManagedWindow.ManagedWindow):
def on_help_clicked(self, obj):
"""Display the relevant portion of GRAMPS manual"""
GrampsDisplay.help('tools-db')
GrampsDisplay.help('tools-db', WIKI_HELP_PAGE , WIKI_HELP_SEC)
def on_ok_clicked(self, obj):
self.trans = self.db.transaction_begin("",batch=True)

@@ -220,8 +220,8 @@ class TopSurnamesGramplet(Gramplet):
person = self.dbstate.db.get_person_from_handle(person_handle)
if person:
allnames = [person.get_primary_name()] + person.get_alternate_names()
for name in allnames:
surname = name.get_group_name().strip()
allnames = set([name.get_group_name().strip() for name in allnames])
for surname in allnames:
surnames[surname] = surnames.get(surname, 0) + 1
representative_handle[surname] = person_handle
if cnt % 350 == 0:
@@ -297,8 +297,8 @@ class SurnameCloudGramplet(Gramplet):
person = self.dbstate.db.get_person_from_handle(person_handle)
if person:
allnames = [person.get_primary_name()] + person.get_alternate_names()
for name in allnames:
surname = name.get_group_name().strip()
allnames = set([name.get_group_name().strip() for name in allnames])
for surname in allnames:
surnames[surname] = surnames.get(surname, 0) + 1
representative_handle[surname] = person_handle
if cnt % 350 == 0:
@@ -455,15 +455,9 @@ class PedigreeGramplet(Gramplet):
_("Right-click name to edit person")
self.max_generations = 100
self.set_use_markup(True)
#self.set_options( {"max_generations":
# NumberOption(_("Maximum generations"),
# 100, -1, 500),
# "expand":
# BooleanOption(_("Expandable"), False),
# "height":
# NumberOption(_("Height"),
# 300, 1, 1024),
# } )
#self.set_option("max_generations",
# NumberOption(_("Maximum generations"),
# 100, -1, 500))
def db_changed(self):
"""

@@ -246,7 +246,7 @@ class RelGraphReport(Report):
label = "%s (%s)" % (label, fam_id)
color = ""
fill = ""
style = ""
style = "solid"
if self.colorize == 'colored':
color = self.colors['family']
elif self.colorize == 'filled':
@@ -266,6 +266,7 @@ class RelGraphReport(Report):
fill = ""
if gender == person.MALE:
shape="box"
style="solid"
elif gender == person.FEMALE:
shape="box"
style="rounded"

@@ -2953,7 +2953,7 @@ class NavWebOptions(MenuReportOptions):
self.__filter = FilterOption(_("Filter"), 0)
self.__filter.set_help(
_("Select filter to restrict people that appear on calendar"))
_("Select filter to restrict people that appear on web files"))
menu.add_option(category_name, "filter", self.__filter)
self.__filter.connect('value-changed', self.__filter_changed)
@@ -2991,7 +2991,7 @@ class NavWebOptions(MenuReportOptions):
css = EnumeratedListOption(_('Stylesheet'), _CSS_FILES[0][1])
for style in _CSS_FILES:
css.add_item(style[1], style[0])
css.set_help( _("The style sheet to be used for the web page"))
css.set_help( _("The style sheet to be used for the web pages"))
menu.add_option(category_name, "css", css)
self.__graph = BooleanOption(_("Include ancestor graph"), True)

@@ -54,7 +54,8 @@ import gtk
#-------------------------------------------------------------------------
import const
from GrampsDbUtils import gramps_db_reader_factory
from QuestionDialog import ErrorDialog
from QuestionDialog import ErrorDialog, WarningDialog
import Utils
from PluginUtils import register_import
#-------------------------------------------------------------------------
@@ -65,30 +66,28 @@ from PluginUtils import register_import
def impData(database, name, cb=None, cl=0):
# Create tempdir, if it does not exist, then check for writability
# THE TEMP DIR is named as the filname.gpkg.media and is created
# in the same dir as the database that we are importing into.
db_path = os.path.dirname(database.get_save_path())
# in the mediapath dir of the family tree we import too
oldmediapath = database.get_mediapath()
#use home dir if no media path
media_path = Utils.media_path(database)
media_dir = "%s.media" % os.path.basename(name)
tmpdir_path = os.path.join(db_path, media_dir)
tmpdir_path = os.path.join(media_path, media_dir)
if not os.path.isdir(tmpdir_path):
try:
os.mkdir(tmpdir_path, 0700)
except:
ErrorDialog( _("Could not create temporary directory %s") %
ErrorDialog( _("Could not create media directory %s") %
tmpdir_path )
return
elif not os.access(tmpdir_path, os.W_OK):
ErrorDialog(_("Temporary directory %s is not writable") % tmpdir_path)
ErrorDialog(_("Media directory %s is not writable") % tmpdir_path)
return
else:
# mediadir exists and writable -- User could have valuable stuff in
# it, have him remove it!
ErrorDialog(_("Media directory %s exists. Delete it first, then"
" restart the import process") % tmpdir_path)
return
else: # tempdir exists and writable -- clean it up if not empty
files = os.listdir(tmpdir_path) ;
for filename in files:
try:
os.remove(os.path.join(tmpdir_path, filename))
except OSError:
try:
os.removedirs(os.path.join(tmpdir_path, filename))
except:
print "could not remove: '%s'" % os.path.join(tmpdir_path, filename)
try:
archive = tarfile.open(name)
for tarinfo in archive:
@@ -101,12 +100,43 @@ def impData(database, name, cb=None, cl=0):
imp_db_name = os.path.join(tmpdir_path, const.XMLFILE)
importer = gramps_db_reader_factory(const.APP_GRAMPS_XML)
importer(database, imp_db_name, cb)
info = importer(database, imp_db_name, cb)
newmediapath = database.get_mediapath()
#import of gpkg should not change media path as all media has new paths!
if not oldmediapath == newmediapath :
database.set_mediapath(oldmediapath)
# Clean up tempdir after ourselves
# THIS HAS BEEN CHANGED, because now we want to keep images
# stay after the import is over. Just delete the XML file.
# Set correct media dir if possible, complain if problems
if oldmediapath is None:
database.set_mediapath(tmpdir_path)
WarningDialog(
_("Base path for relative media set"),
_("The base media path of this family tree has been set to "
"%s. Consider taking a simpler path. You can change this "
"in the Preferences, while moving your media files to the "
"new position, and using the media manager tool, option "
"'Replace substring in the path' to set"
" correct paths in your media objects."
) % tmpdir_path)
else:
WarningDialog(
_("Cannot set base media path"),
_("The family tree you imported into already has a base media "
"path: %(orig_path)s. The imported media objects however "
"are relative from the path %(path)s. You can change the "
"media path in the Preferences or you can convert the "
"imported files to the existing base media path. You can "
"do that by moving your media files to the "
"new position, and using the media manager tool, option "
"'Replace substring in the path' to set"
" correct paths in your media objects."
) % {'orig_path': oldmediapath, 'path': tmpdir_path}
)
# Remove xml file extracted to media dir we imported from
os.remove(imp_db_name)
return info
## files = os.listdir(tmpdir_path)
## for filename in files:

@@ -67,28 +67,27 @@ class Rebuild(Tool.Tool,UpdateCallback):
return
self.db.disable_signals()
if uistate:
self.callback = uistate.pulse_progressbar
uistate.set_busy_cursor(1)
uistate.progress.show()
uistate.push_message(dbstate, _("Rebuilding secondary indices..."))
else:
print "Rebuilding Secondary Indices..."
self.db.rebuild_secondary(self.empty)
print "All secondary indices have been rebuilt."
UpdateCallback.__init__(self,self.callback)
self.set_total(11)
self.db.rebuild_secondary(self.update)
self.reset()
if uistate:
UpdateCallback.__init__(self,self.callback)
self.set_total(11)
self.db.rebuild_secondary(self.update)
self.reset()
uistate.set_busy_cursor(0)
uistate.progress.hide()
OkDialog(_("Secondary indices rebuilt"),
_('All secondary indices have been rebuilt.'))
else:
print "Rebuilding Secondary Indices..."
self.db.rebuild_secondary(self.update_empty)
print "All secondary indices have been rebuilt."
self.db.enable_signals()
#------------------------------------------------------------------------

@@ -263,7 +263,7 @@ class Extract:
def get_handle_count(self, data):
"return number of handles in given (person, handle_list) used for child count, family count"
return [str(len(data[1]))]
return ["%3d" % len(data[1])]
# ------------------- utility methods -------------------------

@@ -174,8 +174,9 @@ class PackageWriter:
for m_id in self.db.get_media_object_handles():
mobject = self.db.get_object_from_handle(m_id)
filename = str(Utils.media_path_full(self.db, mobject.get_path()))
archname = str(mobject.get_path())
if os.path.isfile(filename):
archive.add(filename)
archive.add(filename, archname)
# else:
# # File is lost => ask what to do
# if missmedia_action == 0: