Reports handle file extensions and check for existing file.
svn: r1462
This commit is contained in:
parent
d502310c3c
commit
a67cd53b35
11
NEWS
11
NEWS
@ -2,8 +2,17 @@ Version 0.9.1
|
||||
* Custom paper sizes may be set for reports
|
||||
* Witnesses may be added to an event. The witnesses do not have to be in
|
||||
the database, in which case only a string for a name is kept.
|
||||
* Improved Dialogs to be compliant with GNOME Human Interface Guidelines.
|
||||
* Improved Dialogs to be more compliant with GNOME Human Interface Guidelines.
|
||||
* Added Romanian translation (Radu Bogdan Mare)
|
||||
* Displaying of tabbed person list is significantly faster, since the lists
|
||||
are only drawn with they are selected.
|
||||
* GRAMPS manual has been updated for the GNOME 2 interface.
|
||||
* Patch Names utility allows you to select which names should be modified.
|
||||
* Find dialog is now working again.
|
||||
* Example database can be installed and loaded from the help menu.
|
||||
* The status bar can now optionally show the active person's relationship
|
||||
to the home person (works for English only, since the relationship
|
||||
calculation is region/culture dependent).
|
||||
|
||||
Version 0.9.0
|
||||
* GNOME 2.0 support. Requires pygtk2 and gnome-python2.
|
||||
|
@ -58,6 +58,7 @@ import GrampsCfg
|
||||
import Errors
|
||||
|
||||
import intl
|
||||
|
||||
_ = intl.gettext
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -438,19 +439,19 @@ def register_tool(task, name,
|
||||
_tools.append((task, category, name, description, xpm, status, author_name, author_name))
|
||||
|
||||
|
||||
def register_text_doc(name,classref, table, paper, style):
|
||||
def register_text_doc(name,classref, table, paper, style, ext):
|
||||
"""Register a text document generator"""
|
||||
for n in _textdoc:
|
||||
if n[0] == name:
|
||||
return
|
||||
_textdoc.append((name,classref,table,paper,style))
|
||||
_textdoc.append((name,classref,table,paper,style,ext))
|
||||
|
||||
def register_draw_doc(name,classref):
|
||||
def register_draw_doc(name,classref,paper,style, ext):
|
||||
"""Register a drawing document generator"""
|
||||
for n in _drawdoc:
|
||||
if n[0] == name:
|
||||
return
|
||||
_drawdoc.append((name,classref))
|
||||
_drawdoc.append((name,classref,paper,style,ext))
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -563,6 +564,7 @@ def get_text_doc_menu(main_menu,tables,callback,obj=None):
|
||||
menuitem.set_data("name",item[1])
|
||||
menuitem.set_data("styles",item[4])
|
||||
menuitem.set_data("paper",item[3])
|
||||
menuitem.set_data("ext",item[5])
|
||||
menuitem.set_data("obj",obj)
|
||||
if callback:
|
||||
menuitem.connect("activate",callback)
|
||||
@ -608,9 +610,12 @@ def get_draw_doc_menu(main_menu,callback=None,obj=None):
|
||||
|
||||
index = 0
|
||||
myMenu = gtk.Menu()
|
||||
for (name,classref) in _drawdoc:
|
||||
for (name,classref,paper,styles,ext) in _drawdoc:
|
||||
menuitem = gtk.MenuItem(name)
|
||||
menuitem.set_data("name",classref)
|
||||
menuitem.set_data("styles",styles)
|
||||
menuitem.set_data("paper",paper)
|
||||
menuitem.set_data("ext",ext)
|
||||
menuitem.set_data("obj",obj)
|
||||
if callback:
|
||||
menuitem.connect("activate",callback)
|
||||
|
@ -86,14 +86,18 @@ class OptionDialog:
|
||||
self.xml.get_widget('option1').set_label(btnmsg1)
|
||||
self.xml.get_widget('option2').set_label(btnmsg2)
|
||||
self.top.show()
|
||||
response = self.top.run()
|
||||
if response == gtk.RESPONSE_NO:
|
||||
self.response = self.top.run()
|
||||
if self.response == gtk.RESPONSE_NO:
|
||||
if task1:
|
||||
task1()
|
||||
else:
|
||||
task2()
|
||||
if task2:
|
||||
task2()
|
||||
self.top.destroy()
|
||||
|
||||
def get_response(self):
|
||||
return self.response
|
||||
|
||||
class ErrorDialog:
|
||||
def __init__(self,msg1,msg2=""):
|
||||
|
||||
|
@ -55,7 +55,7 @@ import GrampsCfg
|
||||
import PaperMenu
|
||||
|
||||
from intl import gettext as _
|
||||
from QuestionDialog import ErrorDialog
|
||||
from QuestionDialog import ErrorDialog, OptionDialog
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -184,7 +184,8 @@ class ReportDialog:
|
||||
self.frame_names = []
|
||||
self.frames = {}
|
||||
self.format_menu = None
|
||||
|
||||
self.style_button = None
|
||||
|
||||
self.window = gtk.Dialog('GRAMPS')
|
||||
self.window.set_has_separator(gtk.FALSE)
|
||||
self.cancel = self.window.add_button(gtk.STOCK_CANCEL,1)
|
||||
@ -274,6 +275,12 @@ class ReportDialog:
|
||||
this function."""
|
||||
return "basic_report.xml"
|
||||
|
||||
def get_default_basename(self):
|
||||
"""What should the default name be?
|
||||
"""
|
||||
path = self.get_stylesheet_savefile()
|
||||
return path.split('.')[0]
|
||||
|
||||
def get_print_pagecount_map(self):
|
||||
"""Return the data used to fill out the 'pagecount' option
|
||||
menu in the print options box. The first value is a mapping
|
||||
@ -445,8 +452,9 @@ class ReportDialog:
|
||||
self.output_notebook.set_current_page(self.notebook_page)
|
||||
|
||||
# Does this report format use styles?
|
||||
self.style_button.set_sensitive(obj.get_data("styles"))
|
||||
self.style_menu.set_sensitive(obj.get_data("styles"))
|
||||
if self.style_button:
|
||||
self.style_button.set_sensitive(obj.get_data("styles"))
|
||||
self.style_menu.set_sensitive(obj.get_data("styles"))
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
@ -504,12 +512,9 @@ class ReportDialog:
|
||||
self.tbl.attach(self.target_fileentry,2,4,self.col,self.col+1)
|
||||
self.col += 1
|
||||
|
||||
self.target_fileentry.set_default_path(self.get_default_directory())
|
||||
if self.get_target_is_directory():
|
||||
self.target_fileentry.set_directory_entry(1)
|
||||
|
||||
self.target_fileentry.set_filename(self.get_default_directory())
|
||||
|
||||
path = self.get_default_directory()
|
||||
self.target_fileentry.set_default_path(path)
|
||||
|
||||
def setup_format_frame(self):
|
||||
"""Set up the format frame of the dialog. This function
|
||||
relies on the make_doc_menu() function to do all the hard
|
||||
@ -523,6 +528,20 @@ class ReportDialog:
|
||||
self.tbl.attach(self.format_menu,2,4,self.col,self.col+1)
|
||||
self.col += 1
|
||||
|
||||
type = self.format_menu.get_menu().get_active()
|
||||
ext = type.get_data('ext')
|
||||
if ext == None:
|
||||
ext = ""
|
||||
if type:
|
||||
path = self.get_default_directory()
|
||||
if self.get_target_is_directory():
|
||||
self.target_fileentry.set_filename(path)
|
||||
else:
|
||||
base = self.get_default_basename()
|
||||
path = os.path.normpath("%s/%s%s" % (path,base,ext))
|
||||
self.target_fileentry.set_filename(path)
|
||||
|
||||
|
||||
def setup_style_frame(self):
|
||||
"""Set up the style frame of the dialog. This function relies
|
||||
on other routines create the default style for this report,
|
||||
@ -872,6 +891,16 @@ class ReportDialog:
|
||||
_("The filename that you gave is a directory.\n"
|
||||
"You need to provide a valid filename."))
|
||||
return None
|
||||
|
||||
if os.path.isfile(self.target_path):
|
||||
a = OptionDialog(_('File already exists'),
|
||||
_('You can choose to either overwrite the file, or change '
|
||||
'the selected filename.'),
|
||||
_('_Overwrite'),None,
|
||||
_('_Change filename'),None)
|
||||
|
||||
if a.get_response() == gtk.RESPONSE_YES:
|
||||
return
|
||||
|
||||
self.set_default_directory(os.path.dirname(self.target_path) + os.sep)
|
||||
return 1
|
||||
@ -1112,7 +1141,7 @@ class DrawReportDialog(ReportDialog):
|
||||
def make_doc_menu(self):
|
||||
"""Build a menu of document types that are appropriate for
|
||||
this drawing report."""
|
||||
Plugins.get_draw_doc_menu(self.format_menu)
|
||||
Plugins.get_draw_doc_menu(self.format_menu,self.doc_type_changed)
|
||||
|
||||
def make_document(self):
|
||||
"""Create a document of the type requested by the user."""
|
||||
|
@ -318,4 +318,4 @@ class AbiWordDoc(TextDoc.TextDoc):
|
||||
self.cdata = self.cdata + "</c>"
|
||||
self.cdatalist.append(self.cdata)
|
||||
|
||||
Plugins.register_text_doc(_("AbiWord"),AbiWordDoc,1,1,1)
|
||||
Plugins.register_text_doc(_("AbiWord"),AbiWordDoc,1,1,1,".abw")
|
||||
|
@ -412,4 +412,4 @@ class HtmlDoc(TextDoc.TextDoc):
|
||||
self.empty = 0
|
||||
self.f.write(text)
|
||||
|
||||
Plugins.register_text_doc(_("HTML"),HtmlDoc,1,0,1)
|
||||
Plugins.register_text_doc(_("HTML"),HtmlDoc,1,0,1,".html")
|
||||
|
@ -24,6 +24,8 @@ from latin_utf8 import latin_to_utf8
|
||||
import time
|
||||
import StringIO
|
||||
import gzip
|
||||
|
||||
import Errors
|
||||
from TarFile import TarFile
|
||||
import Plugins
|
||||
import ImgManip
|
||||
@ -435,4 +437,4 @@ class KwordDoc(TextDoc.TextDoc):
|
||||
def write_text(self,text):
|
||||
self.text = self.text + text
|
||||
|
||||
Plugins.register_text_doc(_("KWord"),KwordDoc,1,1,1)
|
||||
Plugins.register_text_doc(_("KWord"),KwordDoc,1,1,1,".kwd")
|
||||
|
@ -394,5 +394,6 @@ Plugins.register_text_doc(
|
||||
classref=LaTeXDoc,
|
||||
table=1,
|
||||
paper=1,
|
||||
style=0
|
||||
style=0,
|
||||
ext=".tex"
|
||||
)
|
||||
|
@ -557,4 +557,4 @@ class OpenDrawDoc(DrawDoc.DrawDoc):
|
||||
# Register document generator
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
Plugins.register_draw_doc(_("OpenOffice/StarOffice 6"),OpenDrawDoc);
|
||||
Plugins.register_draw_doc(_("OpenOffice/StarOffice 6"),OpenDrawDoc,1,1,".sxd");
|
||||
|
@ -569,4 +569,4 @@ class OpenOfficeDoc(TextDoc.TextDoc):
|
||||
self.f.write('</office:document-meta>\n')
|
||||
self.f.close()
|
||||
|
||||
Plugins.register_text_doc(_("OpenOffice/StarOffice 6"),OpenOfficeDoc,1,1,1)
|
||||
Plugins.register_text_doc(_("OpenOffice/StarOffice 6"),OpenOfficeDoc,1,1,1,".sxw")
|
||||
|
@ -249,4 +249,4 @@ def rgb_color(color):
|
||||
b = float(color[2])/255.0
|
||||
return (r,g,b)
|
||||
|
||||
Plugins.register_draw_doc(_("PostScript"),PSDrawDoc);
|
||||
Plugins.register_draw_doc(_("PostScript"),PSDrawDoc,1,1,".ps");
|
||||
|
@ -42,7 +42,7 @@ try:
|
||||
from reportlab.lib.colors import Color
|
||||
from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY
|
||||
import reportlab.lib.styles
|
||||
except:
|
||||
except ImportError:
|
||||
raise Errors.PluginError( _("The ReportLab modules are not installed"))
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
@ -99,7 +99,7 @@ class PdfDoc(TextDoc.TextDoc):
|
||||
pdf_style.fontSize = font.get_size()
|
||||
pdf_style.bulletFontSize = font.get_size()
|
||||
|
||||
if font.get_type_face() == FONT_SERIF:
|
||||
if font.get_type_face() == TextDoc.FONT_SERIF:
|
||||
if font.get_bold():
|
||||
if font.get_italic():
|
||||
pdf_style.fontName = "Times-BoldItalic"
|
||||
@ -123,7 +123,6 @@ class PdfDoc(TextDoc.TextDoc):
|
||||
pdf_style.fontName = "Helvetica"
|
||||
pdf_style.bulletFontName = pdf_style.fontName
|
||||
|
||||
|
||||
right = style.get_right_margin()*cm
|
||||
left = style.get_left_margin()*cm
|
||||
first = left + style.get_first_indent()*cm
|
||||
@ -278,19 +277,17 @@ class PdfDoc(TextDoc.TextDoc):
|
||||
self.image = 1
|
||||
|
||||
def write_text(self,text):
|
||||
text = string.replace(text,'&','&'); # Must be first
|
||||
text = string.replace(text,'<','<');
|
||||
text = string.replace(text,'>','>');
|
||||
self.text = self.text + text
|
||||
text = text.replace('&','&'); # Must be first
|
||||
text = text.replace('<','<');
|
||||
self.text = self.text + text.replace('>','>');
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
# Convert an RGB color tulple to a Color instance
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
def make_color(color):
|
||||
return Color(float(color[0])/255.0, float(color[1])/255.0,
|
||||
float(color[2])/255.0)
|
||||
def make_color(c):
|
||||
return Color(float(c[0])/255.0, float(c[1])/255.0, float(c[2])/255.0)
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
@ -303,5 +300,6 @@ Plugins.register_text_doc(
|
||||
classref=PdfDoc,
|
||||
table=1,
|
||||
paper=1,
|
||||
style=1
|
||||
style=1,
|
||||
ext="pdf"
|
||||
)
|
||||
|
@ -18,9 +18,18 @@
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
import os
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Standard python libraries
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import string
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GRAMPS libraries
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import Plugins
|
||||
import Errors
|
||||
|
||||
@ -28,18 +37,27 @@ import TextDoc
|
||||
import DrawDoc
|
||||
from intl import gettext as _
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# ReportLab PDF detection, PIL detection
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
try:
|
||||
from reportlab.pdfgen import canvas
|
||||
from reportlab.lib.units import cm
|
||||
from reportlab.lib.colors import Color
|
||||
except:
|
||||
except ImportError:
|
||||
raise Errors.PluginError( _("The ReportLab modules are not installed"))
|
||||
|
||||
def make_color(color):
|
||||
return Color(float(color[0])/255.0, float(color[1])/255.0,
|
||||
float(color[2])/255.0)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# PdfDrawDoc
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class PdfDrawDoc(DrawDoc.DrawDoc):
|
||||
"""
|
||||
PDF drawing class. Uses the ReportLab libraries to build the PDF files
|
||||
"""
|
||||
|
||||
def __init__(self,styles,type,orientation):
|
||||
DrawDoc.DrawDoc.__init__(self,styles,type,orientation)
|
||||
@ -139,7 +157,7 @@ class PdfDrawDoc(DrawDoc.DrawDoc):
|
||||
|
||||
w = box_style.get_width()*cm
|
||||
h = box_style.get_height()*cm
|
||||
self.f.setLineWidth(stype.get_line_width())
|
||||
self.f.setLineWidth(box_style.get_line_width())
|
||||
|
||||
if box_style.get_shadow():
|
||||
self.f.setFillColorRGB(0.5,0.5,0.5)
|
||||
@ -148,12 +166,12 @@ class PdfDrawDoc(DrawDoc.DrawDoc):
|
||||
font = p.get_font()
|
||||
|
||||
self.f.setStrokeColor(make_color(font.get_color()))
|
||||
self.f.setFillColor(make_color(box_style.get_color()))
|
||||
self.f.setFillColor(make_color(box_style.get_fill_color()))
|
||||
|
||||
self.f.rect(x*cm,y*cm,w,h,fill=1)
|
||||
|
||||
if text != "":
|
||||
lines = string.split(text,'\n')
|
||||
lines = text.split('\n')
|
||||
self.center_print(lines,font,x*cm,y*cm,w,h)
|
||||
|
||||
def draw_text(self,style,text,x,y):
|
||||
@ -214,4 +232,14 @@ class PdfDrawDoc(DrawDoc.DrawDoc):
|
||||
self.f.drawString(start_x,start_y,text)
|
||||
self.f.restoreState()
|
||||
|
||||
Plugins.register_draw_doc(_("PDF"),PdfDrawDoc);
|
||||
|
||||
def make_color(c):
|
||||
return Color(float(c[0])/255.0, float(c[1])/255.0, float(c[2])/255.0)
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Register the document class
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
Plugins.register_draw_doc(_("PDF"),PdfDrawDoc,1,1,".pdf");
|
||||
|
@ -363,4 +363,4 @@ class RTFDoc(TextDoc.TextDoc):
|
||||
else:
|
||||
self.text = self.text + i
|
||||
|
||||
Plugins.register_text_doc(_("Rich Text Format (RTF)"),RTFDoc,1,1,1)
|
||||
Plugins.register_text_doc(_("Rich Text Format (RTF)"),RTFDoc,1,1,1,".rtf")
|
||||
|
@ -153,7 +153,7 @@ class SvgDrawDoc(DrawDoc.DrawDoc):
|
||||
self.f.write('y="%4.2fcm" ' % y)
|
||||
self.f.write('width="%4.2fcm" ' % bw)
|
||||
self.f.write('height="%4.2fcm" ' % bh)
|
||||
self.f.write('style="fill:#%02x%02x%02x; stroke:#000000; stroke-width:1;"/>\n' % box_style.get_color())
|
||||
self.f.write('style="fill:#%02x%02x%02x; stroke:#000000; stroke-width:1;"/>\n' % box_style.get_fill_color())
|
||||
if text != "":
|
||||
font = p.get_font()
|
||||
font_size = font.get_size()
|
||||
@ -218,4 +218,4 @@ def units(val):
|
||||
# Register document generator
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
Plugins.register_draw_doc(_("SVG (Scalable Vector Graphics)"),SvgDrawDoc);
|
||||
Plugins.register_draw_doc(_("SVG (Scalable Vector Graphics)"),SvgDrawDoc,1,1,".svg");
|
||||
|
@ -163,6 +163,7 @@ class AncestorChart:
|
||||
g.set_width(self.box_width)
|
||||
g.set_paragraph_style("Normal")
|
||||
g.set_shadow(1)
|
||||
g.set_fill_color((255,255,255))
|
||||
self.doc.add_draw_style("box",g)
|
||||
|
||||
g = DrawDoc.GraphicsStyle()
|
||||
|
@ -315,6 +315,10 @@ class TimeLineDialog(Report.DrawReportDialog):
|
||||
return "%s - %s - GRAMPS" % (_("Timeline"),
|
||||
_("Graphical Reports"))
|
||||
|
||||
def get_stylesheet_savefile(self):
|
||||
"""Where to save user defined styles for this report."""
|
||||
return "timeline.xml"
|
||||
|
||||
def get_target_browser_title(self):
|
||||
"""The title of the window created when the 'browse' button is
|
||||
clicked in the 'Save As' frame."""
|
||||
|
@ -36,7 +36,6 @@ import re
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import gtk
|
||||
import gnome.ui
|
||||
import gtk.glade
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
|
@ -5,7 +5,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GRAMPS VERSION\n"
|
||||
"POT-Creation-Date: Wed Apr 16 12:06:31 2003\n"
|
||||
"POT-Creation-Date: Thu Apr 17 22:12:29 2003\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -26,7 +26,7 @@ msgstr ""
|
||||
#: AddSpouse.py:85 ChooseParents.py:55 EditPerson.py:206 FamilyView.py:138
|
||||
#: SelectChild.py:105 gramps_main.py:103 plugins/FilterEditor.py:130
|
||||
#: plugins/IndivComplete.py:370 plugins/IndivSummary.py:211
|
||||
#: plugins/PatchNames.py:145 plugins/RelCalc.py:326 plugins/TimeLine.py:336
|
||||
#: plugins/PatchNames.py:145 plugins/RelCalc.py:326 plugins/TimeLine.py:340
|
||||
#: plugins/WebPage.py:274
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
@ -498,8 +498,8 @@ msgstr ""
|
||||
msgid "%s: unknown"
|
||||
msgstr ""
|
||||
|
||||
#: FamilyView.py:423 Plugins.py:417 Plugins.py:418 Plugins.py:419
|
||||
#: Plugins.py:431 Plugins.py:432 Plugins.py:433 Witness.py:71 const.py:149
|
||||
#: FamilyView.py:423 Plugins.py:418 Plugins.py:419 Plugins.py:420
|
||||
#: Plugins.py:432 Plugins.py:433 Plugins.py:434 Witness.py:71 const.py:149
|
||||
#: const.py:424 const.py:432 gramps.glade:3657 gramps.glade:3850
|
||||
#: gramps.glade:4272 gramps.glade:4452 gramps.glade:5928 gramps.glade:6174
|
||||
#: gramps_main.py:1272 plugins/WebPage.py:288
|
||||
@ -933,7 +933,7 @@ msgid "The GRAMPS ID that you chose for this relationship is already being used.
|
||||
msgstr ""
|
||||
|
||||
#: MediaView.py:75 SourceView.py:68 Sources.py:77 Sources.py:160
|
||||
#: plugins/PatchNames.py:168 plugins/TimeLine.py:347
|
||||
#: plugins/PatchNames.py:168 plugins/TimeLine.py:351
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
@ -1033,31 +1033,31 @@ msgstr ""
|
||||
msgid "_Delete Place"
|
||||
msgstr ""
|
||||
|
||||
#: Plugins.py:81
|
||||
#: Plugins.py:82
|
||||
msgid "No description was provided"
|
||||
msgstr ""
|
||||
|
||||
#: Plugins.py:242
|
||||
#: Plugins.py:243
|
||||
msgid "Report Selection"
|
||||
msgstr ""
|
||||
|
||||
#: Plugins.py:258
|
||||
#: Plugins.py:259
|
||||
msgid "Tool Selection"
|
||||
msgstr ""
|
||||
|
||||
#: Plugins.py:274
|
||||
#: Plugins.py:275
|
||||
msgid "Plugin status"
|
||||
msgstr ""
|
||||
|
||||
#: Plugins.py:286
|
||||
#: Plugins.py:287
|
||||
msgid "All modules were successfully loaded."
|
||||
msgstr ""
|
||||
|
||||
#: Plugins.py:288
|
||||
#: Plugins.py:289
|
||||
msgid "The following modules could not be loaded:"
|
||||
msgstr ""
|
||||
|
||||
#: Plugins.py:414 Plugins.py:428
|
||||
#: Plugins.py:415 Plugins.py:429
|
||||
msgid "Uncategorized"
|
||||
msgstr ""
|
||||
|
||||
@ -1100,8 +1100,8 @@ msgstr ""
|
||||
#: RelImage.py:71 RelImage.py:74 RelImage.py:139 RelImage.py:142
|
||||
#: gramps_main.py:813 gramps_main.py:818 gramps_main.py:827
|
||||
#: plugins/AncestorChart.py:113 plugins/DesGraph.py:210
|
||||
#: plugins/DesGraph.py:219 plugins/WriteGedcom.py:495
|
||||
#: plugins/WriteGedcom.py:500
|
||||
#: plugins/DesGraph.py:219 plugins/WriteGedcom.py:494
|
||||
#: plugins/WriteGedcom.py:499
|
||||
msgid "Could not create %s"
|
||||
msgstr ""
|
||||
|
||||
@ -1265,109 +1265,125 @@ msgstr ""
|
||||
msgid "Working"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:259
|
||||
#: Report.py:260
|
||||
msgid "Save Report As"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:484
|
||||
#: Report.py:492
|
||||
msgid "Document Options"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:494
|
||||
#: Report.py:502
|
||||
msgid "Save As"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:498
|
||||
#: Report.py:506
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:500
|
||||
#: Report.py:508
|
||||
msgid "Filename"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:520
|
||||
#: Report.py:525
|
||||
msgid "Output Format"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:534
|
||||
#: Report.py:553
|
||||
msgid "Styles"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:538 StyleEditor.py:80
|
||||
#: Report.py:557 StyleEditor.py:80
|
||||
msgid "Style Editor"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:597 Report.py:599
|
||||
#: Report.py:616 Report.py:618
|
||||
msgid "Paper Options"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:608
|
||||
#: Report.py:627
|
||||
msgid "Size"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:613
|
||||
#: Report.py:632
|
||||
msgid "Height"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:621 Report.py:637 styles.glade:903 styles.glade:927
|
||||
#: Report.py:640 Report.py:656 styles.glade:903 styles.glade:927
|
||||
#: styles.glade:951
|
||||
msgid "cm"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:625
|
||||
#: Report.py:644
|
||||
msgid "Orientation"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:629
|
||||
#: Report.py:648
|
||||
msgid "Width"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:649
|
||||
#: Report.py:668
|
||||
msgid "Page Count"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:673 Report.py:678
|
||||
#: Report.py:692 Report.py:697
|
||||
msgid "HTML Options"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:680 plugins/eventcmp.glade:192
|
||||
#: Report.py:699 plugins/eventcmp.glade:192
|
||||
msgid "Template"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:699
|
||||
#: Report.py:718
|
||||
msgid "User Template"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:702
|
||||
#: Report.py:721
|
||||
msgid "Choose File"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:741
|
||||
#: Report.py:760
|
||||
msgid "Report Options"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:759 plugins/FilterEditor.py:70 plugins/pafexport.glade:127
|
||||
#: Report.py:778 plugins/FilterEditor.py:70 plugins/pafexport.glade:127
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:776
|
||||
#: Report.py:795
|
||||
msgid "Generations"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:783
|
||||
#: Report.py:802
|
||||
msgid "Page break between generations"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:871
|
||||
#: Report.py:890
|
||||
msgid "Invalid file name"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:872
|
||||
#: Report.py:891
|
||||
msgid ""
|
||||
"The filename that you gave is a directory.\n"
|
||||
"You need to provide a valid filename."
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:896
|
||||
msgid "File already exists"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:897
|
||||
msgid "You can choose to either overwrite the file, or change the selected filename."
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:899
|
||||
msgid "_Overwrite"
|
||||
msgstr ""
|
||||
|
||||
#: Report.py:900
|
||||
msgid "_Change filename"
|
||||
msgstr ""
|
||||
|
||||
#: SelectChild.py:71
|
||||
msgid "Add Children"
|
||||
msgstr ""
|
||||
@ -2134,12 +2150,12 @@ msgstr ""
|
||||
msgid "HTML"
|
||||
msgstr ""
|
||||
|
||||
#: docgen/KwordDoc.py:239 docgen/KwordDoc.py:243
|
||||
#: docgen/KwordDoc.py:241 docgen/KwordDoc.py:245
|
||||
#: plugins/DetAncestralReport.py:62 plugins/DetDescendantReport.py:62
|
||||
msgid "Could not open %s"
|
||||
msgstr ""
|
||||
|
||||
#: docgen/KwordDoc.py:438
|
||||
#: docgen/KwordDoc.py:440
|
||||
msgid "KWord"
|
||||
msgstr ""
|
||||
|
||||
@ -2155,11 +2171,11 @@ msgstr ""
|
||||
msgid "PostScript"
|
||||
msgstr ""
|
||||
|
||||
#: docgen/PdfDoc.py:46 docgen/PdfDrawDoc.py:36
|
||||
#: docgen/PdfDoc.py:46 docgen/PdfDrawDoc.py:50
|
||||
msgid "The ReportLab modules are not installed"
|
||||
msgstr ""
|
||||
|
||||
#: docgen/PdfDoc.py:302 docgen/PdfDrawDoc.py:217
|
||||
#: docgen/PdfDoc.py:299 docgen/PdfDrawDoc.py:245
|
||||
msgid "PDF"
|
||||
msgstr ""
|
||||
|
||||
@ -2171,6 +2187,10 @@ msgstr ""
|
||||
msgid "SVG (Scalable Vector Graphics)"
|
||||
msgstr ""
|
||||
|
||||
#: docgen/TextBufDoc.py:169
|
||||
msgid "Text Buffer Preview"
|
||||
msgstr ""
|
||||
|
||||
#: edit_person.glade:33
|
||||
msgid "Abandon changes and close window"
|
||||
msgstr ""
|
||||
@ -3359,52 +3379,58 @@ msgstr ""
|
||||
msgid "Author's email:"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/AncestorChart.py:217 plugins/AncestorChart.py:425
|
||||
#: plugins/AncestorChart.py:218 plugins/AncestorChart.py:426
|
||||
msgid "Ancestor Chart"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/AncestorChart.py:217 plugins/AncestorChart.py:426
|
||||
#: plugins/DesGraph.py:308 plugins/DesGraph.py:460 plugins/GraphViz.py:78
|
||||
#: plugins/GraphViz.py:448 plugins/TimeLine.py:316 plugins/TimeLine.py:457
|
||||
#: plugins/AncestorChart.py:218 plugins/AncestorChart.py:427
|
||||
#: plugins/DesGraph.py:308 plugins/DesGraph.py:460 plugins/FullFamily.py:105
|
||||
#: plugins/FullFamily.py:170 plugins/GraphViz.py:78 plugins/GraphViz.py:448
|
||||
#: plugins/TimeLine.py:316 plugins/TimeLine.py:461
|
||||
msgid "Graphical Reports"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/AncestorChart.py:221
|
||||
#: plugins/AncestorChart.py:222
|
||||
msgid "Ancestor Chart for %s"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/AncestorChart.py:226
|
||||
#: plugins/AncestorChart.py:227
|
||||
msgid "Save Ancestor Chart"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/AncestorChart.py:238 plugins/DesGraph.py:325
|
||||
#: plugins/AncestorChart.py:239 plugins/DesGraph.py:325
|
||||
#: plugins/FullFamily.py:126
|
||||
msgid "Display Format"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/AncestorChart.py:239 plugins/DesGraph.py:326
|
||||
#: plugins/AncestorChart.py:240 plugins/DesGraph.py:326
|
||||
#: plugins/FullFamily.py:127
|
||||
msgid "Allows you to customize the data in the boxes in the report"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/AncestorChart.py:248 plugins/AncestorReport.py:262
|
||||
#: plugins/AncestorChart.py:249 plugins/AncestorReport.py:262
|
||||
#: plugins/DesGraph.py:335 plugins/FamilyGroup.py:417
|
||||
#: plugins/IndivComplete.py:528 plugins/IndivSummary.py:371
|
||||
#: plugins/FtmStyleAncestors.py:231 plugins/IndivComplete.py:528
|
||||
#: plugins/IndivSummary.py:371
|
||||
msgid "The basic style used for the text display."
|
||||
msgstr ""
|
||||
|
||||
#: plugins/AncestorChart.py:427 plugins/AncestorReport.py:389
|
||||
#: plugins/AncestorChart.py:428 plugins/AncestorReport.py:389
|
||||
#: plugins/DescendReport.py:284 plugins/DetAncestralReport.py:972
|
||||
#: plugins/DetDescendantReport.py:850 plugins/FamilyGroup.py:566
|
||||
#: plugins/FtmStyleAncestors.py:358 plugins/FullFamily.py:171
|
||||
#: plugins/GraphViz.py:447 plugins/IndivComplete.py:667
|
||||
#: plugins/IndivSummary.py:500 plugins/Summary.py:150 plugins/TimeLine.py:456
|
||||
#: plugins/IndivSummary.py:500 plugins/Summary.py:150 plugins/TimeLine.py:460
|
||||
#: plugins/WebPage.py:1267
|
||||
msgid "Beta"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/AncestorChart.py:428
|
||||
#: plugins/AncestorChart.py:429 plugins/FullFamily.py:172
|
||||
msgid "Produces a graphical ancestral tree graph"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/AncestorReport.py:75 plugins/AncestorReport.py:229
|
||||
#: plugins/FtmStyleAncestors.py:196
|
||||
msgid "Ahnentafel Report for %s"
|
||||
msgstr ""
|
||||
|
||||
@ -3482,6 +3508,7 @@ msgid " and was buried in %s."
|
||||
msgstr ""
|
||||
|
||||
#: plugins/AncestorReport.py:225 plugins/AncestorReport.py:387
|
||||
#: plugins/FtmStyleAncestors.py:192
|
||||
msgid "Ahnentafel Report"
|
||||
msgstr ""
|
||||
|
||||
@ -3489,22 +3516,25 @@ msgstr ""
|
||||
#: plugins/DescendReport.py:124 plugins/DescendReport.py:283
|
||||
#: plugins/DetAncestralReport.py:973 plugins/DetDescendantReport.py:851
|
||||
#: plugins/FamilyGroup.py:344 plugins/FamilyGroup.py:565
|
||||
#: plugins/FtmStyleAncestors.py:192 plugins/FtmStyleAncestors.py:357
|
||||
#: plugins/IndivComplete.py:446 plugins/IndivComplete.py:668
|
||||
#: plugins/IndivSummary.py:317 plugins/IndivSummary.py:501
|
||||
msgid "Text Reports"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/AncestorReport.py:234 plugins/DetAncestralReport.py:677
|
||||
#: plugins/FtmStyleAncestors.py:201
|
||||
msgid "Save Ancestor Report"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/AncestorReport.py:248 plugins/DescendReport.py:148
|
||||
#: plugins/FamilyGroup.py:408 plugins/IndivComplete.py:502
|
||||
#: plugins/IndivSummary.py:345 plugins/TimeLine.py:395 plugins/WebPage.py:960
|
||||
#: plugins/FamilyGroup.py:408 plugins/FtmStyleAncestors.py:216
|
||||
#: plugins/IndivComplete.py:502 plugins/IndivSummary.py:345
|
||||
#: plugins/TimeLine.py:399 plugins/WebPage.py:960
|
||||
msgid "The style used for the title of the page."
|
||||
msgstr ""
|
||||
|
||||
#: plugins/AncestorReport.py:257
|
||||
#: plugins/AncestorReport.py:257 plugins/FtmStyleAncestors.py:226
|
||||
msgid "The style used for the generation header."
|
||||
msgstr ""
|
||||
|
||||
@ -3653,8 +3683,8 @@ msgid "Provides a browsable hierarchy based on the active person"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/DescendReport.py:87 plugins/GraphViz.py:103
|
||||
#: plugins/IndivComplete.py:475 plugins/TimeLine.py:359
|
||||
#: plugins/WriteGedcom.py:378
|
||||
#: plugins/IndivComplete.py:475 plugins/TimeLine.py:363
|
||||
#: plugins/WriteGedcom.py:377
|
||||
msgid "Descendants of %s"
|
||||
msgstr ""
|
||||
|
||||
@ -3960,7 +3990,7 @@ msgid "Event comparison filter selection"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/EventCmp.py:147 plugins/GraphViz.py:99 plugins/IndivComplete.py:483
|
||||
#: plugins/TimeLine.py:355 plugins/WebPage.py:921 plugins/WriteGedcom.py:374
|
||||
#: plugins/TimeLine.py:359 plugins/WebPage.py:921 plugins/WriteGedcom.py:373
|
||||
msgid "Entire Database"
|
||||
msgstr ""
|
||||
|
||||
@ -4067,6 +4097,60 @@ msgstr ""
|
||||
msgid "The System Filter Editor builds custom filters that can be used by anyone on the system to select people included in reports, exports, and other utilities."
|
||||
msgstr ""
|
||||
|
||||
#: plugins/FtmStyleAncestors.py:73 plugins/GraphViz.py:107
|
||||
#: plugins/IndivComplete.py:479 plugins/TimeLine.py:367 plugins/WebPage.py:933
|
||||
#: plugins/WriteGedcom.py:381
|
||||
msgid "Ancestors of %s"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/FtmStyleAncestors.py:86
|
||||
msgid "Generation No. %d"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/FtmStyleAncestors.py:120
|
||||
msgid "born %(date)s in %(place)s"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/FtmStyleAncestors.py:125
|
||||
msgid "born on %(date)s"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/FtmStyleAncestors.py:130
|
||||
msgid "born in %(place)s"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/FtmStyleAncestors.py:150
|
||||
msgid "died %(date)s in %(place)s. "
|
||||
msgstr ""
|
||||
|
||||
#: plugins/FtmStyleAncestors.py:155
|
||||
msgid "died on %(date)s. "
|
||||
msgstr ""
|
||||
|
||||
#: plugins/FtmStyleAncestors.py:160
|
||||
msgid "died in %(place)s. "
|
||||
msgstr ""
|
||||
|
||||
#: plugins/FtmStyleAncestors.py:356
|
||||
msgid "FTM Style Ancestor Report"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/FtmStyleAncestors.py:359
|
||||
msgid "Produces a textual ancestral report similar to Family Tree Maker."
|
||||
msgstr ""
|
||||
|
||||
#: plugins/FullFamily.py:105 plugins/FullFamily.py:169
|
||||
msgid "Full Family Chart"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/FullFamily.py:109
|
||||
msgid "Full Family Chart for %s"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/FullFamily.py:114
|
||||
msgid "Save Full Family Chart"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/GraphViz.py:60 plugins/GraphViz.py:87
|
||||
msgid "Single (scaled)"
|
||||
msgstr ""
|
||||
@ -4087,12 +4171,7 @@ msgstr ""
|
||||
msgid "Graphviz File"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/GraphViz.py:107 plugins/IndivComplete.py:479
|
||||
#: plugins/TimeLine.py:363 plugins/WebPage.py:933 plugins/WriteGedcom.py:382
|
||||
msgid "Ancestors of %s"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/GraphViz.py:111 plugins/TimeLine.py:367 plugins/WriteGedcom.py:386
|
||||
#: plugins/GraphViz.py:111 plugins/TimeLine.py:371 plugins/WriteGedcom.py:385
|
||||
msgid "People with common ancestor with %s"
|
||||
msgstr ""
|
||||
|
||||
@ -4675,7 +4754,7 @@ msgstr ""
|
||||
msgid "Relationship calculator"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/RelCalc.py:327 plugins/TimeLine.py:336
|
||||
#: plugins/RelCalc.py:327 plugins/TimeLine.py:340
|
||||
msgid "Birth Date"
|
||||
msgstr ""
|
||||
|
||||
@ -4783,27 +4862,27 @@ msgstr ""
|
||||
msgid "Timeline"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/TimeLine.py:321
|
||||
#: plugins/TimeLine.py:325
|
||||
msgid "Timeline File"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/TimeLine.py:343
|
||||
#: plugins/TimeLine.py:347
|
||||
msgid "Sort by"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/TimeLine.py:379
|
||||
#: plugins/TimeLine.py:383
|
||||
msgid "The style used for the person's name."
|
||||
msgstr ""
|
||||
|
||||
#: plugins/TimeLine.py:387
|
||||
#: plugins/TimeLine.py:391
|
||||
msgid "The style used for the year labels."
|
||||
msgstr ""
|
||||
|
||||
#: plugins/TimeLine.py:451
|
||||
#: plugins/TimeLine.py:455
|
||||
msgid "Generates a timeline graph."
|
||||
msgstr ""
|
||||
|
||||
#: plugins/TimeLine.py:455
|
||||
#: plugins/TimeLine.py:459
|
||||
msgid "Timeline Graph"
|
||||
msgstr ""
|
||||
|
||||
@ -5253,11 +5332,11 @@ msgstr ""
|
||||
msgid "Generates web (HTML) pages for individuals, or a set of individuals."
|
||||
msgstr ""
|
||||
|
||||
#: plugins/WriteGedcom.py:368 plugins/WriteGedcom.py:477
|
||||
#: plugins/WriteGedcom.py:367 plugins/WriteGedcom.py:476
|
||||
msgid "GEDCOM export"
|
||||
msgstr ""
|
||||
|
||||
#: plugins/WriteGedcom.py:1085
|
||||
#: plugins/WriteGedcom.py:1084
|
||||
msgid "Export to GEDCOM"
|
||||
msgstr ""
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user