From 7d5349f23afb2c4ee4e36f1e7875046e541bdff9 Mon Sep 17 00:00:00 2001 From: Don Allingham Date: Sun, 3 Feb 2002 21:57:18 +0000 Subject: [PATCH] New translation methodology svn: r748 --- gramps/NEWS | 1 + gramps/src/Makefile.in | 4 + gramps/src/Report.py | 8 +- gramps/src/build_po | 13 +- gramps/src/get_strings | 520 +- gramps/src/plugins/WebPage.py | 2 +- gramps/src/plugins/ancestorgraph.glade | 769 --- gramps/src/plugins/basicreport.glade | 940 --- gramps/src/plugins/changetype.glade | 2 +- gramps/src/plugins/desbrowse.glade | 2 +- gramps/src/plugins/eventcmp.glade | 8 +- gramps/src/plugins/gedcomimport.glade | 2 +- gramps/src/plugins/grampsimport.glade | 8 +- gramps/src/plugins/merge.glade | 6 +- gramps/src/plugins/patchnames.glade | 6 +- gramps/src/plugins/pkgexport.glade | 2 +- gramps/src/plugins/relcalc.glade | 2 +- gramps/src/plugins/soundex.glade | 2 +- gramps/src/plugins/summary.glade | 2 +- gramps/src/plugins/verify.glade | 2 +- gramps/src/plugins/webpage.glade | 977 --- gramps/src/po/template.po | 8804 ++++++++++++------------ gramps/src/preferences.glade | 130 +- 23 files changed, 4958 insertions(+), 7254 deletions(-) delete mode 100644 gramps/src/plugins/ancestorgraph.glade delete mode 100644 gramps/src/plugins/basicreport.glade delete mode 100644 gramps/src/plugins/webpage.glade diff --git a/gramps/NEWS b/gramps/NEWS index a4b7c40b1..307f100dc 100644 --- a/gramps/NEWS +++ b/gramps/NEWS @@ -5,6 +5,7 @@ Version 0.7.2 * More information in the Startup dialog * Fewer intermediate files when handling images for reports * Reports are now plugins, stored in the DocGen library +* Filter out control characters on GEDCOM import Version 0.7.1 * A database must now be open at all times. Prevents the problem of diff --git a/gramps/src/Makefile.in b/gramps/src/Makefile.in index 384419b61..97be2975d 100644 --- a/gramps/src/Makefile.in +++ b/gramps/src/Makefile.in @@ -49,6 +49,10 @@ uninstall: rm -f ${datadir}/*.py ${datadir}/*.pyo ${datadir}/*.glade ${datadir}/*.xpm -rmdir ${datadir} +trans: po/template.po + ./build_po + +po/template.po: *.py *.glade */*.py */*.glade clean: -rm -f core *.pyo *.pyc *.bak *~ diff --git a/gramps/src/Report.py b/gramps/src/Report.py index 9da4051d1..b52746783 100644 --- a/gramps/src/Report.py +++ b/gramps/src/Report.py @@ -87,7 +87,7 @@ class Report: def get_progressbar_data(self): """The window title for this dialog, and the header line to put at the top of the contents of the dialog box.""" - return (_("Gramps - Progress Report"), _("Working")) + return (_("Progress Report - GRAMPS"), _("Working")) def progress_bar_setup(self,total): """Create a progress dialog. This routine calls a @@ -162,7 +162,7 @@ class ReportDialog: self.frame_names = [] self.frames = {} - self.window = GnomeDialog('Gramps',STOCK_BUTTON_OK,STOCK_BUTTON_CANCEL) + self.window = GnomeDialog('GRAMPS',STOCK_BUTTON_OK,STOCK_BUTTON_CANCEL) self.window.set_default(0) self.window.button_connect(0,self.on_ok_clicked) self.window.button_connect(1,self.on_cancel) @@ -201,7 +201,7 @@ class ReportDialog: #------------------------------------------------------------------------ def get_title(self): """The window title for this dialog.""" - return(_("Gramps - Base Report")) + return(_("Base Report - GRAMPS")) def get_header(self, name): """The header line to put at the top of the contents of the @@ -215,7 +215,7 @@ class ReportDialog: """The title of the window that will be created when the user clicks the 'Browse' button in the 'Save As' File Entry widget.""" - return(_("Gramps - Save Report As")) + return(_("Save Report As - GRAMPS")) def get_target_is_directory(self): """Is the user being asked to input the name of a file or a diff --git a/gramps/src/build_po b/gramps/src/build_po index 713d59271..03a5443aa 100755 --- a/gramps/src/build_po +++ b/gramps/src/build_po @@ -1,10 +1,7 @@ #! /bin/sh +if [ -f po/template.po ] +then + mv po/template.po po/template.po.bak +fi +./get_strings -o po/template.po *.py */*.py *.glade */*.glade -rm -f glade.c -mv template.po template.po.bak -echo "Working on the glade files" -libglade-xgettext -c -o glade.c *.glade plugins/*.glade -echo "Working on python files" -./get_strings *.py plugins/*.py filters/*.py >> glade.c -echo "Building template.po" -xgettext -C -s -a -o template.po glade.c diff --git a/gramps/src/get_strings b/gramps/src/get_strings index 819a0d975..9c4fca14c 100755 --- a/gramps/src/get_strings +++ b/gramps/src/get_strings @@ -1,7 +1,515 @@ -#! /usr/bin/perl +#! /usr/bin/env python +# Originally written by Barry Warsaw +# +# Minimally patched to make it even more xgettext compatible +# by Peter Funk +# +# Completely butchered to add glade support for the GRAMPS +# project by Don Allingham (dallingham@users.sourceforge.net) +# -while (<>) { - if (/_\(\"(.*)\"\)/) { - print "gchar *s = N_(\"$1\");\n" - } -} +"""pygettext -- Python equivalent of xgettext(1) + +Many systems (Solaris, Linux, Gnu) provide extensive tools that ease the +internationalization of C programs. Most of these tools are independent of +the programming language and can be used from within Python programs. Martin +von Loewis' work[1] helps considerably in this regard. + +There's one problem though; xgettext is the program that scans source code +looking for message strings, but it groks only C (or C++). Python introduces +a few wrinkles, such as dual quoting characters, triple quoted strings, and +raw strings. xgettext understands none of this. + +Enter pygettext, which uses Python's standard tokenize module to scan Python +source code, generating .pot files identical to what GNU xgettext[2] generates +for C and C++ code. From there, the standard GNU tools can be used. + +A word about marking Python strings as candidates for translation. GNU +xgettext recognizes the following keywords: gettext, dgettext, dcgettext, and +gettext_noop. But those can be a lot of text to include all over your code. +C and C++ have a trick: they use the C preprocessor. Most internationalized C +source includes a #define for gettext() to _() so that what has to be written +in the source is much less. Thus these are both translatable strings: + + gettext("Translatable String") + _("Translatable String") + +Python of course has no preprocessor so this doesn't work so well. Thus, +pygettext searches only for _() by default, but see the -k/--keyword flag +below for how to augment this. + + [1] http://www.python.org/workshops/1997-10/proceedings/loewis.html + [2] http://www.gnu.org/software/gettext/gettext.html + +NOTE: pygettext attempts to be option and feature compatible with GNU xgettext +where ever possible. However some options are still missing or are not fully +implemented. Also, xgettext's use of command line switches with option +arguments is broken, and in these cases, pygettext just defines additional +switches. + +Usage: pygettext [options] inputfile ... + +Options: + + -a + --extract-all + Extract all strings. + + -d name + --default-domain=name + Rename the default output file from messages.pot to name.pot. + + -E + --escape + Replace non-ASCII characters with octal escape sequences. + + -h + --help + Print this help message and exit. + + -k word + --keyword=word + Keywords to look for in addition to the default set, which are: + %(DEFAULTKEYWORDS)s + + You can have multiple -k flags on the command line. + + -K + --no-default-keywords + Disable the default set of keywords (see above). Any keywords + explicitly added with the -k/--keyword option are still recognized. + + -o filename + --output=filename + Rename the default output file from messages.pot to filename. If + filename is `-' then the output is sent to standard out. + + -p dir + --output-dir=dir + Output files will be placed in directory dir. + + -v + --verbose + Print the names of the files being processed. + + -V + --version + Print the version of pygettext and exit. + + -w columns + --width=columns + Set width of output to columns. + + -x filename + --exclude-file=filename + Specify a file that contains a list of strings that are not be + extracted from the input files. Each string to be excluded must + appear on a line by itself in the file. + +If `inputfile' is -, standard input is read. +""" + +import os +import sys +import time +import getopt +import tokenize +import operator + +# for selftesting +try: + import fintl + _ = fintl.gettext +except ImportError: + def _(s): return s + +__version__ = '1.4' + +default_keywords = ['_'] + +EMPTYSTRING = '' + + +import sys +import string +import xmllib + +class TranslatableStringParser(xmllib.XMLParser): + def __init__(self,msgs): + xmllib.XMLParser.__init__(self) + self.filename = None + self.strings = msgs + self.data = "" + + def add_string(self, string): + if string == "": + return + entry = (self.filename, self.lineno) + if self.strings.has_key(string): + self.strings[string][entry] = 0 + else: + self.strings[string] = {entry: 0} + + def read_file(self, filename): + self.reset() + self.filename = filename + fp = open(filename, "r") + data = fp.read(8192) + while data: + self.feed(data) + data = fp.read(8192) + fp.close() + + def syntax_error(self, message): + sys.stderr.write("%s:%d: %s\n" % (self.filename, self.lineno, + message)) + sys.exit(1) + + def unknown_starttag(self, tag, attrs): + self.data = "" + + def handle_data(self, data): + self.data = self.data + data + + def translate_this_string(self): + self.add_string(self.data) + + # this list should include all tags for which translation should occur + end_label = translate_this_string + end_title = translate_this_string + end_text = translate_this_string + end_format = translate_this_string + end_copyright = translate_this_string + end_comments = translate_this_string + end_preview_text = translate_this_string + end_tooltip = translate_this_string + + def end_items(self): + for item in string.split(self.data, '\n'): + self.add_string(item) + + +# The normal pot-file header. msgmerge and Emacs's po-mode work better if it's +# there. +pot_header = _('''\ +# GRAMPS +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\\n" +"POT-Creation-Date: %(time)s\\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n" +"Last-Translator: FULL NAME \\n" +"Language-Team: LANGUAGE \\n" +"MIME-Version: 1.0\\n" +"Content-Type: text/plain; charset=CHARSET\\n" +"Content-Transfer-Encoding: ENCODING\\n" +"Generated-By: pygettext.py %(version)s\\n" + +''') + + +def usage(code, msg=''): + sys.stderr.write(_(__doc__) % globals()) + if msg: + sys.stderr.write(msg) + sys.stderr.write('\n') + sys.exit(code) + + + +escapes = [] + +def make_escapes(pass_iso8859): + global escapes + if pass_iso8859: + # Allow iso-8859 characters to pass through so that e.g. 'msgid + # "Höhe"' would result not result in 'msgid "H\366he"'. Otherwise we + # escape any character outside the 32..126 range. + mod = 128 + else: + mod = 256 + for i in range(256): + if 32 <= (i % mod) <= 126: + escapes.append(chr(i)) + else: + escapes.append("\\%03o" % i) + escapes[ord('\\')] = '\\\\' + escapes[ord('\t')] = '\\t' + escapes[ord('\r')] = '\\r' + escapes[ord('\n')] = '\\n' + escapes[ord('\"')] = '\\"' + + +def escape(s): + global escapes + s = list(s) + for i in range(len(s)): + s[i] = escapes[ord(s[i])] + return string.join(s,'') + + +def safe_eval(s): + # unwrap quotes, safely + return eval(s, {'__builtins__':{}}, {}) + + +def normalize(s): + # This converts the various Python string types into a format that is + # appropriate for .po files, namely much closer to C style. + lines = string.split(s,'\n') + if len(lines) == 1: + s = '"' + escape(s) + '"' + else: + if not lines[-1]: + del lines[-1] + lines[-1] = lines[-1] + '\n' + for i in range(len(lines)): + lines[i] = escape(lines[i]) + lineterm = '\\n"\n"' + s = '""\n"' + string.join(lines,lineterm) + '"' + return s + +class TokenEater: + def __init__(self, options): + self.__options = options + self.__messages = {} + self.__state = self.__waiting + self.__data = [] + self.__lineno = -1 + self.__freshmodule = 1 + self.__curfile = None + + def __call__(self, ttype, tstring, stup, etup, line): + self.__state(ttype, tstring, stup[0]) + + def __waiting(self, ttype, tstring, lineno): + opts = self.__options + if ttype == tokenize.NAME and tstring in opts.keywords: + self.__state = self.__keywordseen + + def __suiteseen(self, ttype, tstring, lineno): + # ignore anything until we see the colon + if ttype == tokenize.OP and tstring == ':': + self.__state = self.__suitedocstring + + def __suitedocstring(self, ttype, tstring, lineno): + # ignore any intervening noise + if ttype == tokenize.STRING: + self.__addentry(safe_eval(tstring), lineno, isdocstring=1) + self.__state = self.__waiting + elif ttype not in (tokenize.NEWLINE, tokenize.INDENT, + tokenize.COMMENT): + # there was no class docstring + self.__state = self.__waiting + + def __keywordseen(self, ttype, tstring, lineno): + if ttype == tokenize.OP and tstring == '(': + self.__data = [] + self.__lineno = lineno + self.__state = self.__openseen + else: + self.__state = self.__waiting + + def __openseen(self, ttype, tstring, lineno): + if ttype == tokenize.OP and tstring == ')': + # We've seen the last of the translatable strings. Record the + # line number of the first line of the strings and update the list + # of messages seen. Reset state for the next batch. If there + # were no strings inside _(), then just ignore this entry. + if self.__data: + self.__addentry(string.join(self.__data,'')) + self.__state = self.__waiting + elif ttype == tokenize.STRING: + self.__data.append(safe_eval(tstring)) + # TBD: should we warn if we seen anything else? + + def __addentry(self, msg, lineno=None, isdocstring=0): + if lineno is None: + lineno = self.__lineno + if not msg in self.__options.toexclude: + entry = (self.__curfile, lineno) + if self.__messages.has_key(msg): + self.__messages[msg][entry] = isdocstring + else: + self.__messages[msg] = {entry:isdocstring} + + def set_filename(self, filename): + self.__curfile = filename + self.__freshmodule = 1 + + def get_messages(self): + return self.__messages + + def write(self, fp): + options = self.__options + timestamp = time.ctime(time.time()) + # The time stamp in the header doesn't have the same format as that + # generated by xgettext... + fp.write(pot_header % {'time': timestamp, 'version': __version__}) + fp.write('\n') + # Sort the entries. First sort each particular entry's keys, then + # sort all the entries by their first item. + reverse = {} + for k, v in self.__messages.items(): + keys = v.keys() + keys.sort() + if reverse.has_key(tuple(keys)): + reverse[tuple(keys)].append((k,v)) + else: + reverse[tuple(keys)] = [(k,v)] +# reverse.setdefault(tuple(keys), []).append((k, v)) + rkeys = reverse.keys() + rkeys.sort() + for rkey in rkeys: + rentries = reverse[rkey] + rentries.sort() + for k, v in rentries: + isdocstring = 0 + # If the entry was gleaned out of a docstring, then add a + # comment stating so. This is to aid translators who may wish + # to skip translating some unimportant docstrings. + if reduce(operator.__add__, v.values()): + isdocstring = 1 + # k is the message string, v is a dictionary-set of (filename, + # lineno) tuples. We want to sort the entries in v first by + # file name and then by line number. + v = v.keys() + v.sort() + locline = '#:' + for filename, lineno in v: + d = {'filename': filename, 'lineno': lineno} + s = _(' %(filename)s:%(lineno)d') % d + if len(locline) + len(s) <= options.width: + locline = locline + s + else: + fp.write(locline + "\n"); + locline = "#:" + s + if len(locline) > 2: + fp.write(locline + "\n") + fp.write('msgid ' + normalize(k) + "\n") + fp.write('msgstr ""\n' + "\n") + + +def main(): + global default_keywords + try: + opts, args = getopt.getopt( + sys.argv[1:], + 'ad:DEhk:Kno:p:S:Vvw:x:X:', + ['extract-all', 'default-domain=', 'escape', 'help', + 'keyword=', 'no-default-keywords', + 'output=', 'output-dir=', + 'style=', 'verbose', 'version', 'width=', 'exclude-file=', + 'docstrings', 'no-docstrings', + ]) + except getopt.error, msg: + usage(1, msg) + + # for holding option values + class Options: + # constants + # defaults + extractall = 0 # FIXME: currently this option has no effect at all. + escape = 0 + keywords = [] + outpath = '' + outfile = 'messages.pot' + verbose = 0 + width = 78 + excludefilename = '' + docstrings = 0 + nodocstrings = {} + + options = Options() + + # parse options + for opt, arg in opts: + if opt in ('-h', '--help'): + usage(0) + elif opt in ('-a', '--extract-all'): + options.extractall = 1 + elif opt in ('-d', '--default-domain'): + options.outfile = arg + '.pot' + elif opt in ('-E', '--escape'): + options.escape = 1 + elif opt in ('-k', '--keyword'): + options.keywords.append(arg) + elif opt in ('-K', '--no-default-keywords'): + default_keywords = [] + elif opt in ('-o', '--output'): + options.outfile = arg + elif opt in ('-p', '--output-dir'): + options.outpath = arg + elif opt in ('-v', '--verbose'): + options.verbose = 1 + elif opt in ('-V', '--version'): + print _('pygettext.py (xgettext for Python) %s') % __version__ + sys.exit(0) + elif opt in ('-w', '--width'): + try: + options.width = int(arg) + except ValueError: + usage(1, _('--width argument must be an integer: %s') % arg) + elif opt in ('-x', '--exclude-file'): + options.excludefilename = arg + + # calculate escapes + make_escapes(options.escape) + + # calculate all keywords + options.keywords.extend(default_keywords) + + # initialize list of strings to exclude + if options.excludefilename: + try: + fp = open(options.excludefilename) + options.toexclude = fp.readlines() + fp.close() + except IOError: + sys.stderr.write(_("Can't read --exclude-file: %s") % options.excludefilename) + sys.exit(1) + else: + options.toexclude = [] + + # slurp through all the files + eater = TokenEater(options) + p = TranslatableStringParser(eater.get_messages()) + + for filename in args: + if filename[-5:] == 'glade': + print 'Working on %s' % filename + p.read_file(filename) + else: + print 'Working on %s' % filename + fp = open(filename) + closep = 1 + try: + eater.set_filename(filename) + try: + tokenize.tokenize(fp.readline, eater) + except tokenize.TokenError, e: + sys.stderr.write('%s: %s, line %d, column %d' % (e[0], filename, e[1][0], e[1][1])) + finally: + if closep: + fp.close() + + # write the output + if options.outfile == '-': + fp = sys.stdout + closep = 0 + else: + if options.outpath: + options.outfile = os.path.join(options.outpath, options.outfile) + fp = open(options.outfile, 'w') + closep = 1 + try: + eater.write(fp) + finally: + if closep: + fp.close() + +if __name__ == '__main__': + main() diff --git a/gramps/src/plugins/WebPage.py b/gramps/src/plugins/WebPage.py index 1fe58f8dc..a667cccbf 100644 --- a/gramps/src/plugins/WebPage.py +++ b/gramps/src/plugins/WebPage.py @@ -662,7 +662,7 @@ class WebReport(Report): self.template_name = template_name def get_progressbar_data(self): - return (_("Gramps - Generate HTML reports"), _("Creating Web Pages")) + return (_("Generate HTML reports - GRAMPS"), _("Creating Web Pages")) #------------------------------------------------------------------------ # diff --git a/gramps/src/plugins/ancestorgraph.glade b/gramps/src/plugins/ancestorgraph.glade deleted file mode 100644 index 1979f9c49..000000000 --- a/gramps/src/plugins/ancestorgraph.glade +++ /dev/null @@ -1,769 +0,0 @@ - - - - - AncestorGraph - ancestorgraph - - src - pixmaps - C - True - True - - - - GtkDialog - graph - Generate an Ancestor Graph - GTK_WINDOW_DIALOG - GTK_WIN_POS_CENTER - False - True - True - False - - - GtkVBox - Dialog:vbox - dialog-vbox1 - False - 0 - - - GtkHBox - Dialog:action_area - dialog-action_area1 - 10 - True - 5 - - 0 - False - False - GTK_PACK_END - - - - GtkHButtonBox - hbuttonbox1 - GTK_BUTTONBOX_END - 30 - 85 - 27 - 7 - 0 - - 0 - False - True - - - - GtkButton - button1 - True - True - - clicked - on_ok_clicked - graph - Wed, 08 Nov 2000 02:29:39 GMT - - GNOME_STOCK_BUTTON_OK - GTK_RELIEF_NORMAL - - - - GtkButton - button2 - True - True - - clicked - destroy_passed_object - graph - Wed, 08 Nov 2000 02:01:54 GMT - - GNOME_STOCK_BUTTON_CANCEL - GTK_RELIEF_NORMAL - - - - - - GtkVBox - vbox3 - False - 0 - - 0 - True - True - - - - GtkLabel - label8 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 10 - False - False - - - - - GtkNotebook - notebook1 - True - True - True - GTK_POS_TOP - False - 2 - 2 - False - - 10 - True - True - - - - GtkVBox - vbox1 - False - 0 - - - Placeholder - - - - GtkHSeparator - hseparator1 - - 0 - True - True - - - - - GtkTable - table1 - 2 - 2 - False - 0 - 0 - - 4 - False - False - - - - GtkSpinButton - generations - True - 1 - 0 - True - GTK_UPDATE_ALWAYS - False - False - 4 - 0 - 100 - 1 - 10 - 10 - - 1 - 2 - 1 - 2 - 4 - 4 - True - False - False - False - True - False - - - - - GtkLabel - label6 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - 1 - 1 - 2 - 4 - 4 - False - False - False - False - False - False - - - - - GtkLabel - label5 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - 1 - 0 - 1 - 4 - 4 - False - False - False - False - False - False - - - - - GtkEntry - selectedPerson - True - False - True - 0 - - - 1 - 2 - 0 - 1 - 4 - 4 - True - False - False - False - True - False - - - - - - GtkScrolledWindow - scrolledwindow1 - 350 - 200 - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - 0 - True - True - - - - GtkCList - personList - True - - select_row - on_personList_select_row - selectedPerson - Wed, 08 Nov 2000 02:20:36 GMT - - 2 - 232,80 - GTK_SELECTION_SINGLE - True - GTK_SHADOW_IN - - - GtkLabel - CList:title - label3 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - GtkLabel - CList:title - label4 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - - - Placeholder - - - - - GtkLabel - Notebook:tab - label6 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - GtkTable - table2 - 5 - 2 - False - 0 - 0 - - - GnomeFontPicker - fontpicker - True - Pick a Font - AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz - GNOME_FONT_PICKER_MODE_FONT_INFO - True - True - 14 - - 1 - 2 - 0 - 1 - 0 - 0 - False - False - False - False - False - False - - - - - GnomeColorPicker - textcolor - True - True - False - Pick a color - - 1 - 2 - 1 - 2 - 0 - 0 - False - False - False - False - False - False - - - - - GnomeColorPicker - bordercolor - True - True - False - Pick a color - - 1 - 2 - 2 - 3 - 0 - 0 - False - False - False - False - False - False - - - - - GnomeColorPicker - backgroundcolor - True - True - False - Pick a color - - 1 - 2 - 3 - 4 - 0 - 0 - False - False - False - False - False - False - - - - - GnomeColorPicker - boxcolor - True - True - False - Pick a color - - 1 - 2 - 4 - 5 - 0 - 0 - False - False - False - False - False - False - - - - - GtkLabel - label9 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 0 - 1 - 10 - 10 - False - False - False - False - True - False - - - - - GtkLabel - label10 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 1 - 2 - 10 - 10 - False - False - False - False - True - False - - - - - GtkLabel - label11 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 0 - 0 - - 0 - 1 - 2 - 3 - 10 - 10 - False - False - False - False - True - False - - - - - GtkLabel - label12 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 3 - 4 - 10 - 10 - False - False - False - False - True - False - - - - - GtkLabel - label13 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 4 - 5 - 10 - 10 - False - False - False - False - True - False - - - - - - GtkLabel - Notebook:tab - label7 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - - - - - GtkWindow - display - Ancestor Graph - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - True - False - - - GtkVBox - vbox2 - False - 0 - - - GtkHandleBox - handlebox1 - GTK_SHADOW_OUT - GTK_POS_LEFT - GTK_POS_TOP - - 0 - False - False - - - - GtkToolbar - toolbar1 - 1 - GTK_ORIENTATION_HORIZONTAL - GTK_TOOLBAR_BOTH - 5 - GTK_TOOLBAR_SPACE_EMPTY - GTK_RELIEF_NORMAL - True - - - GtkButton - Toolbar:button - button3 - - clicked - destroy_passed_object - display - Thu, 09 Nov 2000 02:39:45 GMT - - - GNOME_STOCK_PIXMAP_CLOSE - - - - GtkButton - Toolbar:button - zoomin - - clicked - on_zoomin_clicked - canvas - Thu, 09 Nov 2000 02:41:13 GMT - - - GNOME_STOCK_PIXMAP_FORWARD - - - - GtkButton - Toolbar:button - zoomout - - clicked - on_zoomout_clicked - canvas - Thu, 09 Nov 2000 02:41:22 GMT - - - GNOME_STOCK_PIXMAP_BACK - - - - GtkButton - Toolbar:button - button6 - - GNOME_STOCK_PIXMAP_PRINT - - - - - - GtkScrolledWindow - scrolledwindow2 - 300 - 300 - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - 0 - True - True - - - - GnomeCanvas - canvas - 1 - True - True - 0 - 0 - 100 - 100 - 1 - - - - - GnomeAppBar - appbar1 - True - True - - 0 - False - False - - - - - - diff --git a/gramps/src/plugins/basicreport.glade b/gramps/src/plugins/basicreport.glade deleted file mode 100644 index 1594def95..000000000 --- a/gramps/src/plugins/basicreport.glade +++ /dev/null @@ -1,940 +0,0 @@ - - - - - Basicreport - basicreport - - src - pixmaps - C - True - True - - - - GnomeDialog - report_dialog - Basic Report - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - False - False - False - False - - - GtkVBox - GnomeDialog:vbox - dialog-vbox1 - False - 0 - - 4 - True - True - - - - GtkHButtonBox - GnomeDialog:action_area - dialog-action_area1 - GTK_BUTTONBOX_END - 8 - 85 - 27 - 7 - 0 - - 0 - False - True - GTK_PACK_END - - - - GtkButton - OK - True - True - True - - clicked - on_ok_clicked - report_dialog - Tue, 18 Dec 2001 09:50:07 GMT - - GNOME_STOCK_BUTTON_OK - - - - GtkButton - Cancel - True - True - - clicked - destroy_passed_object - report_dialog - Sun, 16 Dec 2001 07:52:14 GMT - - GNOME_STOCK_BUTTON_CANCEL - - - - - GtkVBox - dialog_body - False - 0 - - 0 - True - True - - - - GtkLabel - header_label - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkHSeparator - hseparator1 - - 5 - True - True - - - - - GtkFrame - target_frame - 4 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkHBox - save_hbox - 4 - False - 0 - - - GtkLabel - saveas - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - False - False - - - - - GnomeFileEntry - fileentry1 - 350 - file_name - 10 - Save Report - False - False - - 0 - True - True - - - - GtkEntry - GnomeEntry:entry - filename - True - True - True - True - 0 - - - - - - - - GtkFrame - format_frame - 4 - False - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkOptionMenu - format - 7 - True - AbiWord - - 0 - - - - - GtkFrame - style_frame - 4 - False - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkHBox - style_hbox - False - 0 - - - GtkOptionMenu - style_menu - 7 - True - default - - 0 - - 0 - True - True - - - - - GtkButton - style_edit - 10 - True - - clicked - on_style_edit_clicked - dialog1 - Sun, 16 Dec 2001 07:52:56 GMT - - - GTK_RELIEF_NORMAL - - 0 - False - False - - - - - - - GtkNotebook - output_notebook - 4 - False - False - GTK_POS_TOP - False - 2 - 2 - False - - 0 - True - True - - - - GtkFrame - paper_frame - - 0 - GTK_SHADOW_ETCHED_IN - - - GtkTable - paper_table - 2 - 4 - False - 0 - 0 - - - GtkLabel - size_label - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 0 - 1 - 5 - 5 - True - False - True - False - True - False - - - - - GtkLabel - orientation_label - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 2 - 3 - 0 - 1 - 5 - 5 - False - False - True - False - True - False - - - - - GtkOptionMenu - papersize - True - Letter - - 0 - - 1 - 2 - 0 - 1 - 5 - 5 - True - False - True - False - True - False - - - - - GtkOptionMenu - orientation - True - Portrait - - 0 - - 3 - 4 - 0 - 1 - 5 - 5 - True - False - True - False - True - False - - - - - GtkLabel - pagecount_label - False - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 1 - 2 - 5 - 5 - False - False - False - False - True - False - - - - - GtkOptionMenu - pagecount_menu - False - True - Single (scaled) - - 0 - - 1 - 2 - 1 - 2 - 5 - 5 - True - False - True - False - True - False - - - - - - - GtkLabel - Notebook:tab - paper_tab - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - GtkFrame - html_frame - - 0 - GTK_SHADOW_ETCHED_IN - - - GtkTable - table3 - 2 - 4 - False - 0 - 0 - - - GtkLabel - label7 - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 0 - 1 - 5 - 5 - False - False - False - False - True - False - - - - - GnomeFileEntry - htmltemplate - HtmlTemplate - 10 - False - False - - 1 - 4 - 0 - 1 - 5 - 5 - True - False - False - False - True - False - - - - GtkEntry - GnomeEntry:entry - htmlfile - True - True - True - 0 - - - - - - - - GtkLabel - Notebook:tab - html_tab - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - - GtkFrame - options_frame - 4 - False - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkTable - options_table - 5 - 2 - False - 0 - 0 - - - GtkCombo - filter_combo - 5 - False - True - True - False - True - False - - - 1 - 2 - 0 - 1 - 0 - 0 - True - False - False - False - True - False - - - - GtkEntry - GtkCombo:entry - filter - True - True - True - 0 - - - - - - GtkLabel - filter_label - False - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - gen_label - False - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 1 - 2 - 0 - 0 - False - False - False - False - True - False - - - - - GtkSpinButton - generations - False - True - 1 - 0 - True - GTK_UPDATE_ALWAYS - False - False - 0 - 1 - 28 - 1 - 10 - 10 - - 1 - 2 - 1 - 2 - 5 - 5 - True - False - False - False - True - False - - - - - GtkCheckButton - pagebreak - False - True - - False - True - - 1 - 2 - 2 - 3 - 5 - 5 - False - False - False - False - True - False - - - - - GtkLabel - extra_menu_label - False - - GTK_JUSTIFY_CENTER - False - 1 - 0.5 - 5 - 0 - - 0 - 1 - 3 - 4 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - extra_textbox_label - False - - GTK_JUSTIFY_CENTER - False - 1 - 0 - 5 - 5 - - 0 - 1 - 4 - 5 - 0 - 0 - False - False - False - False - True - True - - - - - GtkOptionMenu - extra_menu - 5 - False - True - default - - 0 - - 1 - 2 - 3 - 4 - 0 - 0 - True - False - False - False - True - False - - - - - GtkScrolledWindow - extra_scrolledwindow - 5 - 80 - False - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - 1 - 2 - 4 - 5 - 0 - 0 - True - False - False - False - True - True - - - - GtkText - extra_textbox - True - True - - - - - - - - - - - GtkWindow - progress_dialog - Gramps - Generate HTML reports - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - True - False - - - GtkVBox - vbox2 - False - 0 - - - GtkLabel - header_label - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 5 - - 0 - False - False - - - - - GtkHSeparator - hseparator2 - - 5 - True - True - - - - - GtkHBox - hbox1 - False - 0 - - 10 - True - True - - - - Placeholder - - - - GtkProgressBar - progressbar - 300 - 0 - 0 - 100 - GTK_PROGRESS_CONTINUOUS - GTK_PROGRESS_LEFT_TO_RIGHT - False - True - %v of %u (%P%%) - 0.5 - 0.5 - - 5 - True - True - - - - - Placeholder - - - - - - diff --git a/gramps/src/plugins/changetype.glade b/gramps/src/plugins/changetype.glade index 3e5389549..b25d9e520 100644 --- a/gramps/src/plugins/changetype.glade +++ b/gramps/src/plugins/changetype.glade @@ -15,7 +15,7 @@ GnomeDialog top - Gramps - Change Event Types + Change Event Types - GRAMPS GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False diff --git a/gramps/src/plugins/desbrowse.glade b/gramps/src/plugins/desbrowse.glade index ca082e13b..6047765b4 100644 --- a/gramps/src/plugins/desbrowse.glade +++ b/gramps/src/plugins/desbrowse.glade @@ -15,7 +15,7 @@ GtkDialog top - Gramps - Descendant Browser + Descendant Browser - GRAMPS GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False diff --git a/gramps/src/plugins/eventcmp.glade b/gramps/src/plugins/eventcmp.glade index 95da5ba7f..9f6fec2e6 100644 --- a/gramps/src/plugins/eventcmp.glade +++ b/gramps/src/plugins/eventcmp.glade @@ -15,7 +15,7 @@ GnomeDialog dialog1 - Gramps - Save as a Spreadsheet + Save as a Spreadsheet - GRAMPS GTK_WINDOW_DIALOG GTK_WIN_POS_NONE False @@ -274,7 +274,7 @@ GnomeDialog view 350 - Gramps - Event Comparison + Event Comparison - GRAMPS GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False @@ -417,7 +417,7 @@ GnomeDialog filter_file - Gramps - Complex Filter + Complex Filter - GRAMPS GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False @@ -563,7 +563,7 @@ GnomeDialog filters - Gramps - Event Comparison + Event Comparison - GRAMPS GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False diff --git a/gramps/src/plugins/gedcomimport.glade b/gramps/src/plugins/gedcomimport.glade index 6a0610a40..017604eb2 100644 --- a/gramps/src/plugins/gedcomimport.glade +++ b/gramps/src/plugins/gedcomimport.glade @@ -491,7 +491,7 @@ GtkWindow gedcomImport - Gramps - GEDCOM Import + GEDCOM Import - GRAMPS GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER True diff --git a/gramps/src/plugins/grampsimport.glade b/gramps/src/plugins/grampsimport.glade index 52280b136..f52a73bf7 100644 --- a/gramps/src/plugins/grampsimport.glade +++ b/gramps/src/plugins/grampsimport.glade @@ -2,7 +2,7 @@ - Gramps Import + GRAMPS Import grampsimport src @@ -15,7 +15,7 @@ GtkWindow grampsImport - Gramps - Gramps import + GRAMPS import - GRAMPS GTK_WINDOW_DIALOG GTK_WIN_POS_CENTER True @@ -89,7 +89,7 @@ GtkLabel label3 - + GTK_JUSTIFY_CENTER False 0.5 @@ -152,7 +152,7 @@ 350 GrampsImport 10 - Gramps file + GRAMPS file False True diff --git a/gramps/src/plugins/merge.glade b/gramps/src/plugins/merge.glade index e85a9b5a6..e78252e2d 100644 --- a/gramps/src/plugins/merge.glade +++ b/gramps/src/plugins/merge.glade @@ -15,7 +15,7 @@ GtkWindow message - Gramps - Merge People + Merge People - GRAMPS GTK_WINDOW_DIALOG GTK_WIN_POS_NONE True @@ -118,7 +118,7 @@ GnomeDialog mergelist - Gramps - Merge List + Merge List - GRAMPS GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False @@ -295,7 +295,7 @@ GnomeDialog dialog - Gramps - Merge People + Merge People - GRAMPS GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False diff --git a/gramps/src/plugins/patchnames.glade b/gramps/src/plugins/patchnames.glade index 35bcba363..b63368c5e 100644 --- a/gramps/src/plugins/patchnames.glade +++ b/gramps/src/plugins/patchnames.glade @@ -15,7 +15,7 @@ GtkDialog summary - Gramps - Name and Title Extraction Tool + Name and Title Extraction Tool - GRAMPS GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False @@ -134,8 +134,8 @@ GtkLabel label1 -