Rewrite the reports to be a set of base classes and subclasses.

svn: r637
This commit is contained in:
David Hampton 2001-12-19 09:05:53 +00:00
parent 6c5703b06c
commit 05c8fc72fd
19 changed files with 3578 additions and 5052 deletions

719
gramps/src/Report.py Normal file
View File

@ -0,0 +1,719 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2001 David R. Hampton
#
# 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
#
"Report Generation Framework"
import RelLib
import const
import os
import re
import sort
import string
import utils
import intl
_ = intl.gettext
from TextDoc import *
from StyleEditor import *
import Config
import FindDoc
import PaperMenu
import gtk
import gnome.ui
import libglade
#------------------------------------------------------------------------
#
# The Report base class. This is a base class for generating
# customized reports. It cannot be used as is, but it can be easily
# sub-classed to create a functional report generator.
#
#------------------------------------------------------------------------
class Report:
# Ordinal generation names. Used by multiple reports.
gen = {
1 : _("First"),
2 : _("Second"),
3 : _("Third"),
4 : _("Fourth"),
5 : _("Fifth"),
6 : _("Sixth"),
7 : _("Seventh"),
8 : _("Eighth"),
9 : _("Ninth"),
10: _("Tenth"),
11: _("Eleventh"),
12: _("Twelfth"),
13: _("Thirteenth"),
14: _("Fourteenth"),
15: _("Fifteenth"),
16: _("Sixteenth"),
17: _("Seventeenth"),
18: _("Eighteenth"),
19: _("Nineteenth"),
20: _("Twentieth"),
21: _("Twenty-first"),
22: _("Twenty-second"),
23: _("Twenty-third"),
24: _("Twenty-fourth"),
25: _("Twenty-fifth"),
26: _("Twenty-sixth"),
27: _("Twenty-seventh"),
28: _("Twenty-eighth"),
29: _("Twenty-ninth")
}
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"))
def progress_bar_setup(self,total):
"""Create a progress dialog. This routine calls a
customization function to find out how to fill out the dialog.
The argument to this function is the maximum number of items
that the report will progress; i.e. what's considered 100%,
i.e. the maximum number of times this routine will be
called."""
# Load the glade file
base = os.path.dirname(__file__)
self.glade_file = os.path.join(base, "plugins", "basicreport.glade")
self.pxml = libglade.GladeXML(self.glade_file,"progress_dialog")
# Customize the dialog for this report
(title, header) = self.get_progressbar_data()
self.ptop = self.pxml.get_widget("progress_dialog")
self.ptop.set_title(title)
self.pxml.get_widget("header_label").set_text(header)
# Setup the progress bar limits
self.pbar = self.pxml.get_widget("progressbar")
self.pbar.configure(0.0,0.0,total)
self.pbar_index = 0.0
def progress_bar_step(self):
"""Click the progress bar over to the next value. Be paranoid
and insure that it doesn't go over 100%."""
self.pbar_index = self.pbar_index + 1.0
if (self.pbar_index > 100.0):
self.pbar_index = 100.0
self.pbar.set_value(self.pbar_index)
def progress_bar_done(self):
"""Done with the progress bar. It can be destroyed now."""
utils.destroy_passed_object(self.ptop)
#------------------------------------------------------------------------
#
# The ReportDialog base class. This is a base class for generating
# customized dialogs to solicit options for a report. It cannot be
# used as is, but it can be easily sub-classed to create a functional
# dialog.
#
#------------------------------------------------------------------------
class ReportDialog:
def __init__(self,database,person,filename="basicreport.glade"):
"""Initialize a dialog to request that the user select options
for a basic report. The glade filename is optional. If
provided it must reference a glade file that is either be a
superset of the basic dialog, or the subclass must override
most of the setup_xxx and parse_xxx functions."""
# Save info about who the report is about.
self.db = database
self.person = person
# Load the glade file
base = os.path.dirname(__file__)
self.glade_file = os.path.join(base, "plugins", filename)
self.topDialog = libglade.GladeXML(self.glade_file,"report_dialog")
# Set up and run the dialog. These calls are not in top down
# order when looking at the dialog box as there is some
# interaction between the various frames.
self.setup_title()
self.setup_header()
self.setup_output_notebook()
self.setup_target_frame()
self.setup_style_frame()
self.setup_format_frame()
self.setup_paper_frame()
self.setup_html_frame()
self.setup_report_options_frame()
self.setup_other_frames()
self.connect_signals()
#------------------------------------------------------------------------
#
# Customization hooks for subclasses
#
#------------------------------------------------------------------------
def get_title(self):
"""The window title for this dialog."""
return(_("Gramps - Base Report"))
def get_header(self, name):
"""The header line to put at the top of the contents of the
dialog box. By default this will just be the name of the
selected person. Most subclasses will customize this to give
some indication of what the report will be, i.e. 'Descendant
Report for %s'."""
return(name)
def get_target_browser_title(self):
"""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"))
def get_target_is_directory(self):
"""Is the user being asked to input the name of a file or a
directory in the 'Save As' File Entry widget. This item
currently only selects the Filename/Directory prompt, and
whether or not the browser accepts filenames. In the future it
may also control checking of the selected filename."""
return None
def get_stylesheet_savefile(self):
"""Where should new styles for this report be saved? This is
the name of an XML file that will be located in the ~/.gramps
directory. This file does not have to exist; it will be
created when needed. All subclasses should probably override
this function."""
return "basic_report.xml"
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
of string:value pairs. The strings will be used to label
individual menu items, and the values are what will be
returned if a given menu item is selected. The second value
is the name of menu item to pre-select."""
return (None, None)
def get_report_filter_strings(self):
"""Return the data used to fill out the 'filter' combo box in
the report options box. The return value is the list of
strings to be inserted into the pulldown."""
return None
def get_report_generations(self):
"""Return the default number of generations to start the
spinbox (zero to disable) and whether or not to include the
'page break between generations' check box"""
return (10, 1)
def get_report_extra_menu_map(self):
"""Return the data used to fill out the 'extra' option menu in
the report options box. The first value is the string to be
used as the label to the left of the menu. The second value
is a mapping of string:value pairs. The strings will be used
to label individual menu items, and the values are what will
be returned if a given menu item is selected. The final value
is the name of menu item to pre-select."""
return (None, None, None)
def get_report_extra_textbox_string(self):
"""Return the string to put into the 'extra' text box in
the report options box. If None, then the text box will be
hidden."""
return (None, None)
#------------------------------------------------------------------------
#
# Functions related getting/setting the default directory for a dialog.
#
#------------------------------------------------------------------------
def get_default_directory(self):
"""Get the name of the directory to which the target dialog
box should default. This value can be set in the preferences
panel."""
return Config.report_dir
def set_default_directory(self, value):
"""Save the name of the current directory, so that any future
reports will default to the most recently used directory.
This also changes the directory name that will appear in the
preferences panel, but does not change the preference in disk.
This means that the last directory used will only be
remembered for this session of gramps unless the user saves
his/her preferences."""
Config.report_dir = value
#------------------------------------------------------------------------
#
# Functions to create a default output style.
#
#------------------------------------------------------------------------
def make_default_style(self):
"""Create the default style to be used by the associated report. This
routine is a default implementation and should be overridden."""
font = FontStyle()
font.set(face=FONT_SANS_SERIF,size=16,bold=1)
para = ParagraphStyle()
para.set_font(font)
para.set_header_level(1)
para.set(pad=0.5)
self.default_style.add_style("Title",para)
def build_style_menu(self,dummy):
"""Build a menu of style sets that are available for use in
this report. This menu will always have a default style
available, and will have any other style set name that the
user has previously created for this report. This menu is
created here instead of inline with the rest of the style
frame, because it must be recreated to reflect any changes
whenever the user closes the style editor dialog."""
style_sheet_map = self.style_sheet_list.get_style_sheet_map()
myMenu = utils.build_string_optmenu(style_sheet_map, "default")
self.style_menu.set_menu(myMenu)
#------------------------------------------------------------------------
#
# Functions related to selecting/changing the current file format.
#
#------------------------------------------------------------------------
def make_doc_menu(self):
"""Build a menu of document types that are appropriate for
this report. This menu will be generated based upon the type
of document (text, draw, graph, etc. - a subclass), whether or
not the document requires table support, etc."""
assert 0, _("The make_doc_menu function must be overridden.")
def make_document(self):
"""Create a document of the type selected by the user."""
assert 0, _("The make_document function must be overridden.")
def doc_type_changed(self, obj):
"""This routine is called when the user selects a new file
formats for the report. It adjust the various dialog sections
to reflect the appropriate values for the currently selected
file format. For example, a HTML document doesn't need any
paper size/orientation options, but it does need a template
file. Those chances are made here."""
# Is this to be a printed report or an electronic report
# (i.e. a set of web pages)
if obj.get_data("paper") == 1:
self.output_notebook.set_page(0)
else:
self.output_notebook.set_page(1)
# Does this report format use styles?
self.style_frame.set_sensitive(obj.get_data("styles"))
#------------------------------------------------------------------------
#
# Functions related to setting up the dialog window.
#
#------------------------------------------------------------------------
def setup_title(self):
"""Set up the title bar of the dialog. This function relies
on the get_title() customization function for what the title
should be."""
self.window = self.topDialog.get_widget("report_dialog")
self.name = self.person.getPrimaryName().getRegularName()
self.window.set_title(self.get_title())
def setup_header(self):
"""Set up the header line bar of the dialog. This function
relies on the get_header() customization function for what the
header line should read. If no customization function is
supplied by the subclass, the default is to use the full name
of the currently selected person."""
name = self.person.getPrimaryName().getRegularName()
self.header = self.topDialog.get_widget("header_label")
self.header.set_text(self.get_header(name))
def setup_target_frame(self):
"""Set up the target frame of the dialog. This function
relies on several target_xxx() customization functions to
determine whether the target is a directory or file, what the
title of any browser window should be, and what default
directory should be used."""
self.target_fileentry = self.topDialog.get_widget("fileentry1")
self.target_fileentry.set_title(self.get_target_browser_title())
self.target_fileentry.set_default_path(self.get_default_directory())
if (self.get_target_is_directory()):
import _gnomeui
_gnomeui.gnome_file_entry_set_directory(self.target_fileentry._o, 1)
self.topDialog.get_widget("saveas").set_text(_("Directory"))
self.target_filename = self.topDialog.get_widget("filename")
self.target_filename.set_text(self.get_default_directory())
# Faugh! The following line of code would allow the 'Enter'
# key in the file name box to close the dialog. However there
# is a bug (or is it?) in the closing of the Gnome FileEntry
# browser that sends the same signal that is sent when the
# 'Enter' key is pressed. This causes the report to be run
# when the browser window is closed instead of waiting for the
# dialog window OK button to be clicked. The user does not
# have a chance to set any other options.
#
# self.window.editable_enters(self.target_filename)
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
work."""
self.format_menu = self.topDialog.get_widget("format")
self.make_doc_menu()
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,
and to read in any user defined styles for this report. It
the builds a menu of all the available styles for the user to
choose from."""
self.style_frame = self.topDialog.get_widget("style_frame")
self.style_menu = self.topDialog.get_widget("style_menu")
# Build the default style set for this report.
self.default_style = StyleSheet()
self.make_default_style()
# Build the initial list of available styles sets. This
# includes the default style set and any style sets saved from
# previous invocations of gramps.
self.style_sheet_list = StyleSheetList(self.get_stylesheet_savefile(),
self.default_style)
# Now build the actual menu.
self.build_style_menu(None)
def setup_output_notebook(self):
"""Set up the output notebook of the dialog. This sole
purpose of this function is to grab a pointer for later use in
the callback from when the file format is changed."""
self.output_notebook = self.topDialog.get_widget("output_notebook")
def setup_paper_frame(self):
"""Set up the paper selection frame of the dialog. This
function relies on a paper_xxx() customization functions to
determine whether the pagecount menu should appear and what
its strings should be."""
# Paper size and orientation. Always present in this frame.
self.papersize_menu = self.topDialog.get_widget("papersize")
PaperMenu.make_paper_menu(self.papersize_menu)
self.orientation_menu = self.topDialog.get_widget("orientation")
PaperMenu.make_orientation_menu(self.orientation_menu)
# The optional pagecount stuff.
self.pagecount_menu = self.topDialog.get_widget("pagecount_menu")
self.pagecount_label = self.topDialog.get_widget("pagecount_label")
(pagecount_map, start_text) = self.get_print_pagecount_map()
if pagecount_map:
myMenu = utils.build_string_optmenu(pagecount_map, start_text)
self.pagecount_menu.set_menu(myMenu)
else:
self.pagecount_menu.hide()
self.pagecount_label.hide()
def setup_html_frame(self):
"""Set up the html frame of the dialog. This sole purpose of
this function is to grab a pointer for later use in the parse
html frame function."""
self.html_fileentry = self.topDialog.get_widget("htmltemplate")
def setup_report_options_frame(self):
"""Set up the report options frame of the dialog. This
function relies on several report_xxx() customization
functions to determine which of the items should be present in
this box. *All* of these items are optional, although the
generations fields and the filter combo box are used in most
(but not all) dialog boxes."""
# Set up the generations spin and page break checkbox
(use_gen, use_break) = self.get_report_generations()
self.generations_spinbox = self.topDialog.get_widget("generations")
self.pagebreak_checkbox = self.topDialog.get_widget("pagebreak")
if use_gen:
self.generations_spinbox.set_value(use_gen)
else:
self.topDialog.get_widget("gen_label").hide()
self.generations_spinbox.hide()
use_break = 0
if not use_break:
self.pagebreak_checkbox.hide()
# Now the filter combo
self.filter_combo = self.topDialog.get_widget("filter_combo")
filter_strings = self.get_report_filter_strings()
if filter_strings:
filter_strings.sort()
self.filter_combo.set_popdown_strings(filter_strings)
else:
self.topDialog.get_widget("filter_label").hide()
self.filter_combo.hide()
# Now the "extra" option menu
self.extra_menu_label = self.topDialog.get_widget("extra_menu_label")
self.extra_menu = self.topDialog.get_widget("extra_menu")
(label, extra_map, preset) = self.get_report_extra_menu_map()
if extra_map:
self.extra_menu_label.set_text(label)
myMenu = utils.build_string_optmenu(extra_map, preset)
self.extra_menu.set_menu(myMenu)
self.extra_menu.set_sensitive(len(extra_map) > 1)
else:
self.extra_menu_label.hide()
self.extra_menu.hide()
# Now the "extra" text box
self.extra_textbox_label = self.topDialog.get_widget("extra_textbox_label")
self.extra_textbox = self.topDialog.get_widget("extra_textbox")
(label, string) = self.get_report_extra_textbox_string()
if string:
self.extra_textbox_label.set_text(label)
self.extra_textbox.insert_defaults(string)
else:
self.extra_textbox_label.hide()
self.topDialog.get_widget("extra_scrolledwindow").hide()
def setup_other_frames(self):
"""Do nothing. This sole purpose of this function is to give
subclass a place to hang a routine to handle any other frames
that are unique to that specific report."""
pass
def connect_signals(self):
"""Connect the signal handlers for this dialog. The signal
handlers in this default function will handle all of the items
in the basic report dialog. Most items do not interact with
each other, and their vales will be read back when the user
clicks the OK button. This dialog only need be sub-classed if
there is interaction between/within any additional frames
added in a subclass."""
self.topDialog.signal_autoconnect({
"destroy_passed_object" : utils.destroy_passed_object,
"on_style_edit_clicked" : self.on_style_edit_clicked,
"on_ok_clicked" : self.on_ok_clicked
})
#------------------------------------------------------------------------
#
# Functions related to retrieving data from the dialog window
#
#------------------------------------------------------------------------
def parse_target_frame(self):
"""Parse the target frame of the dialog. If the target
filename is empty this routine returns a special value of None
to tell the calling routine to give up. This function also
saves the current directory so that any future reports will
default to the most recently used directory."""
self.target_path = self.target_fileentry.get_full_path(0)
if not self.target_path:
return None
self.set_default_directory(os.path.dirname(self.target_path) + os.sep)
return 1
def parse_format_frame(self):
"""Parse the format frame of the dialog. Save the user
selected output format for later use."""
self.format = self.format_menu.get_menu().get_active().get_data("name")
def parse_style_frame(self):
"""Parse the style frame of the dialog. Save the user
selected output style for later use. Note that this routine
retrieves a value whether or not the menu is displayed on the
screen. The subclass will know whether this menu was enabled.
This is for simplicity of programming."""
self.selected_style = self.style_menu.get_menu().get_active().get_data("d")
def parse_paper_frame(self):
"""Parse the paper frame of the dialog. Save the user
selected choices for later use. Note that this routine
retrieves a value from the pagecount menu, whether or not it
is displayed on the screen. The subclass will know which ones
it has enabled. This is for simplicity of programming."""
self.paper = self.papersize_menu.get_menu().get_active().get_data("i")
self.orien = self.orientation_menu.get_menu().get_active().get_data("i")
self.pagecount = self.pagecount_menu.get_menu().get_active().get_data("d")
def parse_html_frame(self):
"""Parse the html frame of the dialog. Save the user selected
html template name for later use. Note that this routine
retrieves a value whether or not the file entry box is
displayed on the screen. The subclass will know whether this
entry was enabled. This is for simplicity of programming."""
self.template_name = self.html_fileentry.get_full_path(0)
def parse_report_options_frame(self):
"""Parse the report options frame of the dialog. Save the
user selected choices for later use. Note that this routine
retrieves a value from all fields in the frame, regardless of
whether or not they are displayed on the screen. The subclass
will know which ones it has enabled. This is for simplicity
of programming."""
self.max_gen = self.generations_spinbox.get_value_as_int()
self.pg_brk = self.pagebreak_checkbox.get_active()
self.filter = self.filter_combo.entry.get_text()
self.report_menu = self.extra_menu.get_menu().get_active().get_data("d")
self.report_text = string.split(self.extra_textbox.get_chars(0,-1),'\n')
def parse_other_frames(self):
"""Do nothing. This sole purpose of this function is to give
subclass a place to hang a routine to parser any other frames
that are unique to that specific report."""
pass
#------------------------------------------------------------------------
#
# Callback functions from the dialog
#
#------------------------------------------------------------------------
def on_style_edit_clicked(self, obj):
"""The user has clicked on the 'Edit Styles' button. Create a
style sheet editor object and let them play. When they are
done, the previous routine will be called to update the dialog
menu for selecting a style."""
StyleListDisplay(self.style_sheet_list,self.build_style_menu,None)
def on_ok_clicked(self, obj):
"""The user is satisfied with the dialog choices. Validate
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():
return
# Preparation
self.parse_format_frame()
self.parse_style_frame()
self.parse_paper_frame()
self.parse_html_frame()
self.parse_report_options_frame()
self.parse_other_frames()
# Create the output document.
self.make_document()
# Create the report object and product the report.
self.make_report()
# Clean up the dialog object
utils.destroy_passed_object(obj)
#------------------------------------------------------------------------
#
# Functions related to creating the actual report document.
#
#------------------------------------------------------------------------
def make_report(self):
"""Create the contents of the report. This is the meat and
potatoes of reports. The whole purpose of the dialog is to
get to this routine so that data is written to a file. This
routine should either write the data directly to the file, or
better yet, should create a subclass of a Report that will
write the data to a file."""
assert 0, _("The make_report function must be overridden.")
#------------------------------------------------------------------------
#
# TextReportDialog - A class of ReportDialog customized for text based
# reports.
#
#------------------------------------------------------------------------
class TextReportDialog(ReportDialog):
def __init__(self,database,person,filename):
"""Initialize a dialog to request that the user select options
for a basic text report. See the ReportDialog class for more
information."""
ReportDialog.__init__(self,database,person,filename)
#------------------------------------------------------------------------
#
# Customization hooks for subclasses
#
#------------------------------------------------------------------------
def doc_uses_tables(self):
"""Does this report require the ability to generate tables in
the file format. Override this for documents that do need
table support."""
return 0
#------------------------------------------------------------------------
#
# Functions related to selecting/changing the current file format.
#
#------------------------------------------------------------------------
def make_doc_menu(self):
"""Build a menu of document types that are appropriate for
this text report. This menu will be generated based upon
whether the document requires table support, etc."""
FindDoc.get_text_doc_menu(self.format_menu, self.doc_uses_tables(),
self.doc_type_changed)
def make_document(self):
"""Create a document of the type requested by the user."""
self.doc = FindDoc.make_text_doc(self.selected_style,self.format,
self.paper,self.orien,
self.template_name)
#------------------------------------------------------------------------
#
# Functions related to creating the actual report document.
#
#------------------------------------------------------------------------
def make_report(self):
"""Create the contents of the report. This is a simple
default implementation suitable for testing. Is should be
overridden to produce a real report."""
self.doc.start_paragraph("Title")
title = "Basic Report for %s" % self.name
self.doc.write_text(title)
self.doc.end_paragraph()
#------------------------------------------------------------------------
#
# DrawReportDialog - A class of ReportDialog customized for drawing based
# reports.
#
#------------------------------------------------------------------------
class DrawReportDialog(ReportDialog):
def __init__(self,database,person,filename):
"""Initialize a dialog to request that the user select options
for a basic drawing report. See the ReportDialog class for
more information."""
ReportDialog.__init__self,database,person,filename()
#------------------------------------------------------------------------
#
# Functions related to selecting/changing the current file format.
#
#------------------------------------------------------------------------
def make_doc_menu(self):
"""Build a menu of document types that are appropriate for
this drawing report."""
FindDoc.get_draw_doc_menu(self.format_menu)
def make_document(self):
"""Create a document of the type requested by the user."""
self.doc = FindDoc.make_draw_doc(self.selected_style,self.format,
self.paper,self.orien)

View File

@ -76,6 +76,12 @@ class PaperStyle:
def get_width(self):
return self.width
def get_height_inches(self):
return self.height / 2.54
def get_width_inches(self):
return self.width / 2.54
#------------------------------------------------------------------------
#
#
@ -402,6 +408,9 @@ class StyleSheetList:
def delete_style_sheet(self,name):
del self.map[name]
def get_style_sheet_map(self):
return self.map
def get_style_sheet(self,name):
return self.map[name]

View File

@ -21,17 +21,12 @@
"Generate files/Ancestor Chart"
import Config
import const
import os
import string
import utils
from FontScale import string_width
from TextDoc import *
from DrawDoc import *
from StyleEditor import *
import FindDoc
from Report import *
import libglade
import gtk
@ -39,17 +34,6 @@ import gtk
import intl
_ = intl.gettext
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
active_person = None
db = None
styles = StyleSheet()
style_sheet_list = None
topDialog = None
#------------------------------------------------------------------------
#
# pt2cm - convert points to centimeters
@ -63,14 +47,14 @@ def pt2cm(pt):
#
#
#------------------------------------------------------------------------
class AncestorReport:
class AncestorChart:
#--------------------------------------------------------------------
#
#
#
#--------------------------------------------------------------------
def __init__(self,database,display,person,output,doc,max):
def __init__(self,database,person,output,max,doc,display):
self.doc = doc
self.doc.creator(database.getResearcher().getName())
self.map = {}
@ -141,7 +125,6 @@ class AncestorReport:
#
#--------------------------------------------------------------------
def write_report(self):
self.calc()
try:
self.doc.open(self.output)
@ -256,114 +239,81 @@ class AncestorReport:
self.draw_graph(index*2,start*2,level+1)
self.draw_graph((index*2)+1,(start*2)+1,level+1)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class AncestorChartDialog(DrawReportDialog):
def __init__(self,database,person):
ReportDialog.__init__(self,database,person)
#------------------------------------------------------------------------
#
# Customization hooks
#
#------------------------------------------------------------------------
def get_title(self):
"""The window title for this dialog"""
return _("Gramps - Ancestor Chart")
def get_header(self, name):
"""The header line at the top of the dialog contents."""
return _("Ancestor Chart for %s") % name
def get_target_browser_title(self):
"""The title of the window created when the 'browse' button is
clicked in the 'Save As' frame."""
return _("Save Ancestor Chart")
def get_stylesheet_savefile(self):
"""Where to save user defined styles for this report."""
return "ancestor_chart.xml"
def get_report_generations(self):
"""Default to 10 generations, no page breaks."""
return (10, 0)
def get_report_extra_textbox_string(self):
"""Label the textbox and provide the default contents."""
return (_("Display Format"), "$n\nb. $b\nd. $d")
#------------------------------------------------------------------------
#
# Create output styles appropriate to this report.
#
#------------------------------------------------------------------------
def make_default_style(self):
"""Make the default output style for the Ancestor Chart report."""
f = FontStyle()
f.set_size(9)
f.set_type_face(FONT_SANS_SERIF)
p = ParagraphStyle()
p.set_font(f)
self.default_style.add_style("Normal",p)
#------------------------------------------------------------------------
#
# Create the contents of the report.
#
#------------------------------------------------------------------------
def make_report(self):
"""Create the object that will produce the Ancestor Chart.
All user dialog has already been handled and the output file
opened."""
MyReport = AncestorChart(self.db, self.person, self.target_path,
self.max_gen, self.doc, self.report_text)
MyReport.write_report()
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def report(database,person):
import PaperMenu
global style_sheet_list
global active_person
global topDialog
global db
active_person = person
db = database
base = os.path.dirname(__file__)
glade_file = base + os.sep + "ancestorchart.glade"
topDialog = libglade.GladeXML(glade_file,"dialog1")
topDialog.get_widget("fileentry1").set_default_path(Config.report_dir)
name = person.getPrimaryName().getRegularName()
PaperMenu.make_paper_menu(topDialog.get_widget("papersize"))
PaperMenu.make_orientation_menu(topDialog.get_widget("orientation"))
FindDoc.get_draw_doc_menu(topDialog.get_widget("format"))
styles.clear()
f = FontStyle()
f.set_size(9)
f.set_type_face(FONT_SANS_SERIF)
p = ParagraphStyle()
p.set_font(f)
styles.add_style("Normal",p)
style_sheet_list = StyleSheetList("ancestor_chart.xml",styles)
build_menu(None)
title = _("Ancestor Chart for %s") % name
topDialog.get_widget("labelTitle").set_text(title)
topDialog.signal_autoconnect({
"destroy_passed_object" : utils.destroy_passed_object,
"on_style_edit_clicked" : on_style_edit_clicked,
"on_save_clicked" : on_save_clicked
})
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def build_menu(object):
menu = topDialog.get_widget("style_menu")
myMenu = gtk.GtkMenu()
for style in style_sheet_list.get_style_names():
menuitem = gtk.GtkMenuItem(style)
menuitem.set_data("d",style_sheet_list.get_style_sheet(style))
menuitem.show()
myMenu.append(menuitem)
menu.set_menu(myMenu)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def option_switch(obj):
pass
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def on_style_edit_clicked(obj):
StyleListDisplay(style_sheet_list,build_menu,None)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def on_save_clicked(obj):
global active_person
global db
outputName = topDialog.get_widget("fileentry1").get_full_path(0)
if outputName == "":
return
paper_obj = topDialog.get_widget("papersize").get_menu().get_active()
paper = paper_obj.get_data("i")
orien_obj = topDialog.get_widget("orientation").get_menu().get_active()
orien = orien_obj.get_data("i")
max_gen = topDialog.get_widget("generations").get_value_as_int()
text = topDialog.get_widget("display_text").get_chars(0,-1)
text = string.split(text,'\n')
styles = topDialog.get_widget("style_menu").get_menu().get_active().get_data("d")
item = topDialog.get_widget("format").get_menu().get_active()
format = item.get_data("name")
doc = FindDoc.make_draw_doc(styles,format,paper,orien)
MyReport = AncestorReport(db,text,active_person,outputName,doc,max_gen)
MyReport.write_report()
utils.destroy_passed_object(obj)
AncestorChartDialog(database,person)
#------------------------------------------------------------------------
#

View File

@ -21,19 +21,13 @@
"Generate files/Ahnentafel Report"
import RelLib
import const
import os
import string
import utils
import Config
import intl
_ = intl.gettext
from TextDoc import *
from StyleEditor import *
import FindDoc
from Report import *
import gtk
import gnome.ui
@ -44,57 +38,14 @@ import libglade
#
#
#------------------------------------------------------------------------
active_person = None
db = None
styles = StyleSheet()
style_sheet_list = None
topDialog = None
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class AncestorReport:
gen = {
1 : _("First"),
2 : _("Second"),
3 : _("Third"),
4 : _("Fourth"),
5 : _("Fifth"),
6 : _("Sixth"),
7 : _("Seventh"),
8 : _("Eighth"),
9 : _("Ninth"),
10: _("Tenth"),
11: _("Eleventh"),
12: _("Twelfth"),
13: _("Thirteenth"),
14: _("Fourteenth"),
15: _("Fifteenth"),
16: _("Sixteenth"),
17: _("Seventeenth"),
18: _("Eightteenth"),
19: _("Nineteenth"),
20: _("Twentieth"),
21: _("Twenty-first"),
22: _("Twenty-second"),
23: _("Twenty-third"),
24: _("Twenty-fourth"),
25: _("Twenty-fifth"),
26: _("Twenty-sixth"),
27: _("Twenty-seventh"),
28: _("Twenty-eighth"),
29: _("Twenty-ninth")
}
class AncestorReport(Report):
#--------------------------------------------------------------------
#
#
#
#--------------------------------------------------------------------
def __init__(self,database,person,output,max,pgbrk,doc):
def __init__(self,database,person,output,max,doc,pgbrk):
self.map = {}
self.database = database
self.start = person
@ -268,135 +219,86 @@ class AncestorReport:
self.doc.close()
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class AncestorReportDialog(TextReportDialog):
def __init__(self,database,person):
ReportDialog.__init__(self,database,person)
#------------------------------------------------------------------------
#
# Customization hooks
#
#------------------------------------------------------------------------
def get_title(self):
"""The window title for this dialog"""
return _("Gramps - Ahnentafel Report")
def get_header(self, name):
"""The header line at the top of the dialog contents"""
return _("Ahnentafel Report for %s") % name
def get_target_browser_title(self):
"""The title of the window created when the 'browse' button is
clicked in the 'Save As' frame."""
return _("Save Ancestor Report")
def get_stylesheet_savefile(self):
"""Where to save styles for this report."""
return "ancestor_report.xml"
#------------------------------------------------------------------------
#
# Create output styles appropriate to this report.
#
#------------------------------------------------------------------------
def make_default_style(self):
"""Make the default output style for the Ahnentafel report."""
font = FontStyle()
font.set(face=FONT_SANS_SERIF,size=16,bold=1)
para = ParagraphStyle()
para.set_font(font)
para.set_header_level(1)
para.set(pad=0.5)
self.default_style.add_style("Title",para)
font = FontStyle()
font.set(face=FONT_SANS_SERIF,size=14,italic=1)
para = ParagraphStyle()
para.set_font(font)
para.set_header_level(2)
para.set(pad=0.5)
self.default_style.add_style("Generation",para)
para = ParagraphStyle()
para.set(first_indent=-1.0,lmargin=1.0,pad=0.25)
self.default_style.add_style("Entry",para)
#------------------------------------------------------------------------
#
# Create the contents of the report.
#
#------------------------------------------------------------------------
def make_report(self):
"""Create the object that will produce the Ahnentafel Report.
All user dialog has already been handled and the output file
opened."""
MyReport = AncestorReport(self.db, self.person, self.target_path,
self.max_gen, self.doc, self.pg_brk)
MyReport.write_report()
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def report(database,person):
import PaperMenu
global active_person
global topDialog
global db
global style_sheet_list
active_person = person
db = database
AncestorReportDialog(database,person)
base = os.path.dirname(__file__)
glade_file = base + os.sep + "ancestorreport.glade"
topDialog = libglade.GladeXML(glade_file,"dialog1")
topDialog.get_widget("fileentry1").set_default_path(Config.report_dir)
name = person.getPrimaryName().getRegularName()
PaperMenu.make_paper_menu(topDialog.get_widget("papersize"))
PaperMenu.make_orientation_menu(topDialog.get_widget("orientation"))
FindDoc.get_text_doc_menu(topDialog.get_widget("format"),0,option_switch)
styles.clear()
font = FontStyle()
font.set(face=FONT_SANS_SERIF,size=16,bold=1)
para = ParagraphStyle()
para.set_font(font)
para.set_header_level(1)
para.set(pad=0.5)
styles.add_style("Title",para)
font = FontStyle()
font.set(face=FONT_SANS_SERIF,size=14,italic=1)
para = ParagraphStyle()
para.set_font(font)
para.set_header_level(2)
para.set(pad=0.5)
styles.add_style("Generation",para)
para = ParagraphStyle()
para.set(first_indent=-1.0,lmargin=1.0,pad=0.25)
styles.add_style("Entry",para)
style_sheet_list = StyleSheetList("ancestor_report.xml",styles)
build_menu(None)
topDialog.get_widget("labelTitle").set_text(_("Ahnentafel Report for %s") % name)
topDialog.signal_autoconnect({
"destroy_passed_object" : utils.destroy_passed_object,
"on_style_edit_clicked" : on_style_edit_clicked,
"on_save_clicked" : on_save_clicked
})
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def build_menu(object):
menu = topDialog.get_widget("style_menu")
myMenu = gtk.GtkMenu()
for style in style_sheet_list.get_style_names():
menuitem = gtk.GtkMenuItem(style)
menuitem.set_data("d",style_sheet_list.get_style_sheet(style))
menuitem.show()
myMenu.append(menuitem)
menu.set_menu(myMenu)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def option_switch(obj):
val = obj.get_data("paper")
st = obj.get_data("styles")
notebook = topDialog.get_widget("option_notebook")
if val == 1:
notebook.set_page(0)
else:
notebook.set_page(1)
topDialog.get_widget("style_frame").set_sensitive(st)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def on_style_edit_clicked(obj):
StyleListDisplay(style_sheet_list,build_menu,None)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def on_save_clicked(obj):
global active_person
global db
outputName = topDialog.get_widget("fileentry1").get_full_path(0)
if not outputName:
return
max_gen = topDialog.get_widget("generations").get_value_as_int()
pgbrk = topDialog.get_widget("pagebreak").get_active()
template = topDialog.get_widget("htmltemplate").get_full_path(0)
paper_obj = topDialog.get_widget("papersize").get_menu().get_active()
paper = paper_obj.get_data("i")
orien_obj = topDialog.get_widget("orientation").get_menu().get_active()
orien = orien_obj.get_data("i")
item = topDialog.get_widget("format").get_menu().get_active()
format = item.get_data("name")
styles = topDialog.get_widget("style_menu").get_menu().get_active().get_data("d")
doc = FindDoc.make_text_doc(styles,format,paper,orien,template)
MyReport = AncestorReport(db,active_person,outputName,max_gen,pgbrk,doc)
MyReport.write_report()
utils.destroy_passed_object(obj)
#------------------------------------------------------------------------
#

View File

@ -27,12 +27,7 @@ import intl
_ = intl.gettext
import const
import Config
import utils
from TextDoc import *
from StyleEditor import *
import FindDoc
from Report import *
import gtk
import libglade
@ -49,10 +44,11 @@ class DescendantReport:
#
#
#--------------------------------------------------------------------
def __init__(self,name,person,db,doc):
def __init__(self,db,person,name,max,doc):
self.creator = db.getResearcher().getName()
self.name = name
self.person = person
self.max_generations = max
self.doc = doc
#--------------------------------------------------------------------
@ -116,6 +112,9 @@ class DescendantReport:
self.dump_dates(person)
self.doc.end_paragraph()
if (level >= self.max_generations):
return
childlist = []
for family in person.getFamilyList():
for child in family.getChildList():
@ -130,30 +129,39 @@ class DescendantReport:
#
#
#------------------------------------------------------------------------
class DesReportWindow:
def __init__(self,person,db):
import PaperMenu
self.person = person
class DescendantReportDialog(TextReportDialog):
def __init__(self,person,database):
ReportDialog.__init__(self,database,person)
glade_file = os.path.dirname(__file__) + os.sep + "desreport.glade"
self.top = libglade.GladeXML(glade_file,"dialog1")
self.top.get_widget("fileentry1").set_default_path(Config.report_dir)
self.top.signal_autoconnect({
"destroy_passed_object" : utils.destroy_passed_object,
"on_style_edit_clicked" : on_style_edit_clicked,
"on_save_clicked": on_save_clicked
})
#------------------------------------------------------------------------
#
# Customization hooks
#
#------------------------------------------------------------------------
def get_title(self):
"""The window title for this dialog"""
return _("Gramps - Descendant Report")
notebook = self.top.get_widget("option_notebook")
notebook.set_data("frame",self.top.get_widget("style_frame"))
PaperMenu.make_paper_menu(self.top.get_widget("papersize"))
PaperMenu.make_orientation_menu(self.top.get_widget("orientation"))
FindDoc.get_text_doc_menu(self.top.get_widget("format"),0,\
option_switch,notebook)
mytop = self.top.get_widget("dialog1")
def get_header(self, name):
"""The header line at the top of the dialog contents"""
return _("Descendant Report for %s") % name
def get_target_browser_title(self):
"""The title of the window created when the 'browse' button is
clicked in the 'Save As' frame."""
return _("Save Descendant Report")
def get_stylesheet_savefile(self):
"""Where to save styles for this report."""
return "descend_report.xml"
#------------------------------------------------------------------------
#
# Create output styles appropriate to this report.
#
#------------------------------------------------------------------------
def make_default_style(self):
"""Make the default output style for the Descendant Report."""
f = FontStyle()
f.set_size(14)
f.set_type_face(FONT_SANS_SERIF)
@ -161,56 +169,29 @@ class DesReportWindow:
p = ParagraphStyle()
p.set_header_level(1)
p.set_font(f)
sheet = StyleSheet()
sheet.add_style("Title",p)
self.default_style.add_style("Title",p)
f = FontStyle()
for i in range(1,10):
p = ParagraphStyle()
p.set_font(f)
p.set_left_margin(float(i-1))
sheet.add_style("Level" + str(i),p)
self.default_style.add_style("Level" + str(i),p)
self.style_sheet_list = StyleSheetList("descend_report.xml",sheet)
build_menu(self)
mytop.set_data("o",self)
mytop.set_data("d",db)
mytop.show()
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def build_menu(object):
myMenu = gtk.GtkMenu()
for style in object.style_sheet_list.get_style_names():
menuitem = gtk.GtkMenuItem(style)
menuitem.set_data("d",object.style_sheet_list.get_style_sheet(style))
menuitem.show()
myMenu.append(menuitem)
object.top.get_widget("style_menu").set_menu(myMenu)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def option_switch(obj):
val = obj.get_data("paper")
st = obj.get_data("styles")
notebook = obj.get_data("obj")
frame = notebook.get_data("frame")
if val == 1:
notebook.set_page(0)
else:
notebook.set_page(1)
frame.set_sensitive(st)
#------------------------------------------------------------------------
#
# Create the contents of the report.
#
#------------------------------------------------------------------------
def make_report(self):
"""Create the object that will produce the Descendant Report.
All user dialog has already been handled and the output file
opened."""
MyReport = DescendantReport(self.db, self.person, self.target_path,
self.max_gen, self.doc)
MyReport.setup()
MyReport.report()
MyReport.end()
#------------------------------------------------------------------------
#
@ -218,50 +199,7 @@ def option_switch(obj):
#
#------------------------------------------------------------------------
def report(database,person):
DesReportWindow(person,database)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def on_style_edit_clicked(obj):
myobj = obj.get_data("o")
StyleListDisplay(myobj.style_sheet_list,build_menu,myobj)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def on_save_clicked(obj):
myobj = obj.get_data("o")
db = obj.get_data("d")
file = myobj.top.get_widget("fileentry1").get_full_path(0)
if file == "":
return
paper_obj = myobj.top.get_widget("papersize")
paper = paper_obj.get_menu().get_active().get_data("i")
orien_obj = myobj.top.get_widget("orientation")
orien = orien_obj.get_menu().get_active().get_data("i")
template = myobj.top.get_widget("htmltemplate").get_full_path(0)
item = myobj.top.get_widget("format").get_menu().get_active()
format = item.get_data("name")
styles = myobj.top.get_widget("style_menu").get_menu().get_active().get_data("d")
doc = FindDoc.make_text_doc(styles,format,paper,orien,template)
report = DescendantReport(file,myobj.person,db,doc)
report.setup()
report.report()
report.end()
utils.destroy_passed_object(obj)
DescendantReportDialog(person,database)
#------------------------------------------------------------------------
#

View File

@ -22,20 +22,13 @@
"Generate files/Detailed Ancestral Report"
import RelLib
import const
import os
import re
import sort
import string
import utils
import intl
_ = intl.gettext
from TextDoc import *
from StyleEditor import *
import FindDoc
from Report import *
import gtk
import gnome.ui
@ -46,50 +39,8 @@ import libglade
#
#
#------------------------------------------------------------------------
active_person = None
db = None
styles = StyleSheet()
style_sheet_list = None
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class DetAncestorReport:
gen = {
1 : _("First"),
2 : _("Second"),
3 : _("Third"),
4 : _("Fourth"),
5 : _("Fifth"),
6 : _("Sixth"),
7 : _("Seventh"),
8 : _("Eighth"),
9 : _("Ninth"),
10: _("Tenth"),
11: _("Eleventh"),
12: _("Twelfth"),
13: _("Thirteenth"),
14: _("Fourteenth"),
15: _("Fifteenth"),
16: _("Sixteenth"),
17: _("Seventeenth"),
18: _("Eightteenth"),
19: _("Nineteenth"),
20: _("Twentieth"),
21: _("Twenty-first"),
22: _("Twenty-second"),
23: _("Twenty-third"),
24: _("Twenty-fourth"),
25: _("Twenty-fifth"),
26: _("Twenty-sixth"),
27: _("Twenty-seventh"),
28: _("Twenty-eighth"),
29: _("Twenty-ninth")
}
class DetAncestorReport(Report):
#--------------------------------------------------------------------
#
#
@ -484,154 +435,104 @@ class DetAncestorReport:
self.doc.close()
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class DetAncestorReportDialog(TextReportDialog):
def __init__(self,database,person):
ReportDialog.__init__(self,database,person)
#------------------------------------------------------------------------
#
# Customization hooks
#
#------------------------------------------------------------------------
def get_title(self):
"""The window title for this dialog"""
return _("Gramps - Ahnentafel Report")
def get_header(self, name):
"""The header line at the top of the dialog contents"""
return _("Detailed Ancestral Report for %s") % name
def get_target_browser_title(self):
"""The title of the window created when the 'browse' button is
clicked in the 'Save As' frame."""
return _("Save Ancestor Report")
def get_stylesheet_savefile(self):
"""Where to save styles for this report."""
return "det_ancestor_report.xml"
#------------------------------------------------------------------------
#
# Create output styles appropriate to this report.
#
#------------------------------------------------------------------------
def make_default_style(self):
"""Make the default output style for the Detailed Ancestral Report"""
font = FontStyle()
font.set(face=FONT_SANS_SERIF,size=16,bold=1)
para = ParagraphStyle()
para.set_font(font)
para.set_header_level(1)
para.set(pad=0.5)
self.default_style.add_style("Title",para)
font = FontStyle()
font.set(face=FONT_SANS_SERIF,size=14,italic=1)
para = ParagraphStyle()
para.set_font(font)
para.set_header_level(2)
para.set(pad=0.5)
self.default_style.add_style("Generation",para)
font = FontStyle()
font.set(face=FONT_SANS_SERIF,size=12,italic=1)
para = ParagraphStyle()
para.set_font(font)
para.set_header_level(3)
para.set_left_margin(1.0) # in centimeters
para.set(pad=0.5)
self.default_style.add_style("ChildTitle",para)
para = ParagraphStyle()
para.set(first_indent=1.0,lmargin=0.0,pad=0.25)
self.default_style.add_style("ChildList",para)
para = ParagraphStyle()
para.set(first_indent=-1.0,lmargin=1.0,pad=0.25)
self.default_style.add_style("Entry",para)
table = TableStyle()
table.set_width(1000)
table.set_columns(3)
table.set_column_width(1,"30%")
#self.default_style.add_style("Images",table)
#------------------------------------------------------------------------
#
# Create the contents of the report.
#
#------------------------------------------------------------------------
def make_report(self):
"""Create the object that will produce the Detailed Ancestral
Report. All user dialog has already been handled and the
output file opened."""
MyReport = DetAncestorReport(self.db, self.person, self.target_path,
self.max_gen, self.pg_brk, self.doc)
MyReport.write_report()
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def report(database,person):
import PaperMenu
global active_person
global topDialog
global glade_file
global db
global style_sheet_list
active_person = person
db = database
base = os.path.dirname(__file__)
glade_file = base + os.sep + "ancestorreport.glade"
topDialog = libglade.GladeXML(glade_file,"dialog1")
name = person.getPrimaryName().getRegularName()
PaperMenu.make_paper_menu(topDialog.get_widget("papersize"))
PaperMenu.make_orientation_menu(topDialog.get_widget("orientation"))
FindDoc.get_text_doc_menu(topDialog.get_widget("format"),0,option_switch)
styles.clear()
font = FontStyle()
font.set(face=FONT_SANS_SERIF,size=16,bold=1)
para = ParagraphStyle()
para.set_font(font)
para.set_header_level(1)
para.set(pad=0.5)
styles.add_style("Title",para)
font = FontStyle()
font.set(face=FONT_SANS_SERIF,size=14,italic=1)
para = ParagraphStyle()
para.set_font(font)
para.set_header_level(2)
para.set(pad=0.5)
styles.add_style("Generation",para)
font = FontStyle()
font.set(face=FONT_SANS_SERIF,size=12,italic=1)
para = ParagraphStyle()
para.set_font(font)
para.set_header_level(3)
para.set_left_margin(1.0) # in centimeters
para.set(pad=0.5)
styles.add_style("ChildTitle",para)
para = ParagraphStyle()
para.set(first_indent=1.0,lmargin=0.0,pad=0.25)
styles.add_style("ChildList",para)
para = ParagraphStyle()
para.set(first_indent=-1.0,lmargin=1.0,pad=0.25)
styles.add_style("Entry",para)
table = TableStyle()
table.set_width(1000)
table.set_columns(3)
table.set_column_width(1,"30%")
#add_table_style("Images",table)
style_sheet_list = StyleSheetList("det_ancestor_report.xml",styles)
build_menu(None)
topDialog.get_widget("labelTitle").set_text(_("Detailed Ancestral Report for %s") % name)
topDialog.signal_autoconnect({
"destroy_passed_object" : utils.destroy_passed_object,
"on_style_edit_clicked" : on_style_edit_clicked,
"on_save_clicked" : on_save_clicked
})
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def build_menu(object):
menu = topDialog.get_widget("style_menu")
myMenu = gtk.GtkMenu()
for style in style_sheet_list.get_style_names():
menuitem = gtk.GtkMenuItem(style)
menuitem.set_data("d",style_sheet_list.get_style_sheet(style))
menuitem.show()
myMenu.append(menuitem)
menu.set_menu(myMenu)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def option_switch(obj):
val = obj.get_data("paper")
st = obj.get_data("styles")
notebook = topDialog.get_widget("option_notebook")
if val == 1:
notebook.set_page(0)
else:
notebook.set_page(1)
topDialog.get_widget("style_frame").set_sensitive(st)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def on_style_edit_clicked(obj):
StyleListDisplay(style_sheet_list,build_menu,None)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def on_save_clicked(obj):
global active_person
global db
outputName = topDialog.get_widget("fileentry1").get_full_path(0)
if not outputName:
return
max_gen = topDialog.get_widget("generations").get_value_as_int()
pgbrk = topDialog.get_widget("pagebreak").get_active()
template = topDialog.get_widget("htmltemplate").get_full_path(0)
paper_obj = topDialog.get_widget("papersize").get_menu().get_active()
paper = paper_obj.get_data("i")
orien_obj = topDialog.get_widget("orientation").get_menu().get_active()
orien = orien_obj.get_data("i")
item = topDialog.get_widget("format").get_menu().get_active()
format = item.get_data("name")
styles = topDialog.get_widget("style_menu").get_menu().get_active().get_data("d")
doc = FindDoc.make_text_doc(styles,format,paper,orien,template)
MyReport = DetAncestorReport(db,active_person,outputName,max_gen,pgbrk,doc)
MyReport.write_report()
utils.destroy_passed_object(obj)
DetAncestorReportDialog(database,person)
#------------------------------------------------------------------------
#

View File

@ -21,32 +21,15 @@
"Generate files/Family Group Report"
import RelLib
import const
import os
import string
import FindDoc
import utils
import intl
import Config
_ = intl.gettext
from TextDoc import *
from StyleEditor import *
from Report import *
import gtk
import libglade
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
active_person = None
db = None
styles = StyleSheet()
style_sheet_list = None
topDialog = None
#------------------------------------------------------------------------
#
#
@ -336,177 +319,132 @@ class FamilyGroup:
self.doc.end_table()
self.end()
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class FamilyGroupDialog(TextReportDialog):
def __init__(self,database,person):
ReportDialog.__init__(self,database,person)
#------------------------------------------------------------------------
#
# Customization hooks
#
#------------------------------------------------------------------------
def get_title(self):
"""The window title for this dialog"""
return _("Gramps - Family Group Report")
def get_header(self, name):
"""The header line at the top of the dialog contents"""
return _("Family Group Report for %s") % name
def get_target_browser_title(self):
"""The title of the window created when the 'browse' button is
clicked in the 'Save As' frame."""
return _("Save Family Group Report")
def get_stylesheet_savefile(self):
"""Where to save styles for this report."""
return "family_group.xml"
def doc_uses_tables(self):
"""This report requires table support."""
return 1
def get_report_generations(self):
"""No generation options."""
return (0, 0)
def get_report_extra_menu_map(self):
"""Create a mapping of all spouse names:families to be put
into the 'extra' option menu in the report options box. If
the selected person has never been married then this routine
will return a placebo label and disable the OK button."""
mapping = {}
family_list = self.person.getFamilyList()
if not family_list:
mapping[_("No known marriages")] = None
self.topDialog.get_widget("OK").set_sensitive(0)
for family in family_list:
if self.person == family.getFather():
spouse = family.getMother()
else:
spouse = family.getFather()
if spouse:
name = spouse.getPrimaryName().getName()
else:
name= _("unknown")
mapping[name] = family
return (_("Spouse"), mapping, None)
#------------------------------------------------------------------------
#
# Create output styles appropriate to this report.
#
#------------------------------------------------------------------------
def make_default_style(self):
"""Make default output style for the Family Group Report."""
para = ParagraphStyle()
font = FontStyle()
font.set_size(4)
para.set_font(font)
self.default_style.add_style('blank',para)
font = FontStyle()
font.set_type_face(FONT_SANS_SERIF)
font.set_size(16)
font.set_bold(1)
para = ParagraphStyle()
para.set_font(font)
self.default_style.add_style('Title',para)
font = FontStyle()
font.set_type_face(FONT_SERIF)
font.set_size(10)
font.set_bold(0)
para = ParagraphStyle()
para.set_font(font)
self.default_style.add_style('Normal',para)
font = FontStyle()
font.set_type_face(FONT_SANS_SERIF)
font.set_size(10)
font.set_bold(1)
para = ParagraphStyle()
para.set_font(font)
self.default_style.add_style('ChildText',para)
font = FontStyle()
font.set_type_face(FONT_SANS_SERIF)
font.set_size(12)
font.set_bold(1)
para = ParagraphStyle()
para.set_font(font)
self.default_style.add_style('ParentName',para)
#------------------------------------------------------------------------
#
# Create the contents of the report.
#
#------------------------------------------------------------------------
def make_report(self):
"""Create the object that will produce the Ancestor Chart.
All user dialog has already been handled and the output file
opened."""
MyReport = FamilyGroup(self.db, self.report_menu, self.target_path, self.doc)
MyReport.setup()
MyReport.write_report()
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def report(database,person):
import PaperMenu
global active_person
global topDialog
global db
global style_sheet_list
active_person = person
db = database
glade_file = "%s/familygroup.glade" % os.path.dirname(__file__)
topDialog = libglade.GladeXML(glade_file,"dialog1")
topDialog.get_widget("fileentry1").set_default_path(Config.report_dir)
name = person.getPrimaryName().getRegularName()
family_list = person.getFamilyList()
label = topDialog.get_widget("labelTitle")
label.set_text(_("Family Group Report for %s") % name)
topDialog.signal_autoconnect({
"destroy_passed_object" : utils.destroy_passed_object,
"on_style_edit_clicked" : on_style_edit_clicked,
"on_save_clicked" : on_save_clicked
})
PaperMenu.make_paper_menu(topDialog.get_widget("papersize"))
PaperMenu.make_orientation_menu(topDialog.get_widget("orientation"))
FindDoc.get_text_doc_menu(topDialog.get_widget("format"),1,option_switch)
styles.clear()
para = ParagraphStyle()
font = FontStyle()
font.set_size(4)
para.set_font(font)
styles.add_style('blank',para)
font = FontStyle()
font.set_type_face(FONT_SANS_SERIF)
font.set_size(16)
font.set_bold(1)
para = ParagraphStyle()
para.set_font(font)
styles.add_style('Title',para)
font = FontStyle()
font.set_type_face(FONT_SERIF)
font.set_size(10)
font.set_bold(0)
para = ParagraphStyle()
para.set_font(font)
styles.add_style('Normal',para)
font = FontStyle()
font.set_type_face(FONT_SANS_SERIF)
font.set_size(10)
font.set_bold(1)
para = ParagraphStyle()
para.set_font(font)
styles.add_style('ChildText',para)
font = FontStyle()
font.set_type_face(FONT_SANS_SERIF)
font.set_size(12)
font.set_bold(1)
para = ParagraphStyle()
para.set_font(font)
styles.add_style('ParentName',para)
style_sheet_list = StyleSheetList("family_group.xml",styles)
build_menu(None)
frame = topDialog.get_widget("spouse")
option_menu = topDialog.get_widget("spouse_menu")
if len(family_list) > 1:
frame.show()
else:
frame.hide()
my_menu = gtk.GtkMenu()
for family in family_list:
if person == family.getFather():
spouse = family.getMother()
else:
spouse = family.getFather()
if spouse:
item = gtk.GtkMenuItem(spouse.getPrimaryName().getName())
else:
item = gtk.GtkMenuItem("unknown")
item.set_data("f",family)
item.show()
my_menu.append(item)
option_menu.set_menu(my_menu)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def on_style_edit_clicked(obj):
StyleListDisplay(style_sheet_list,build_menu,None)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def build_menu(object):
menu = topDialog.get_widget("style_menu")
myMenu = gtk.GtkMenu()
for style in style_sheet_list.get_style_names():
menuitem = gtk.GtkMenuItem(style)
menuitem.set_data("d",style_sheet_list.get_style_sheet(style))
menuitem.show()
myMenu.append(menuitem)
menu.set_menu(myMenu)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def option_switch(obj):
val = obj.get_data("paper")
st = obj.get_data("styles")
notebook = topDialog.get_widget("option_notebook")
if val == 1:
notebook.set_page(0)
else:
notebook.set_page(1)
topDialog.get_widget("style_frame").set_sensitive(st)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def on_save_clicked(obj):
global active_person
global db
outputName = topDialog.get_widget("fileentry1").get_full_path(0)
if not outputName:
return
menu = topDialog.get_widget("spouse_menu").get_menu()
family = menu.get_active().get_data("f")
paper_obj = topDialog.get_widget("papersize")
paper = paper_obj.get_menu().get_active().get_data("i")
orien_obj = topDialog.get_widget("orientation")
orien = orien_obj.get_menu().get_active().get_data("i")
template = topDialog.get_widget("htmlfile").get_text()
item = topDialog.get_widget("format").get_menu().get_active()
format = item.get_data("name")
doc = FindDoc.make_text_doc(styles,format,paper,orien,template)
MyReport = FamilyGroup(db,family,outputName,doc)
MyReport.setup()
MyReport.write_report()
utils.destroy_passed_object(obj)
FamilyGroupDialog(database,person)
#------------------------------------------------------------------------
#

View File

@ -21,17 +21,13 @@
"Generate files/Relationship graph"
import os
import utils
import intl
_ = intl.gettext
import libglade
from Report import *
active_person = None
db = None
topDialog = None
glade_file = None
ind_list = []
#------------------------------------------------------------------------
@ -39,49 +35,54 @@ ind_list = []
#
#
#------------------------------------------------------------------------
def ancestor_filter(database,person,list):
def ancestor_filter(database,person,list,generations):
if person == None:
return
if person not in list:
list.append(person)
if generations <= 1:
return
family = person.getMainFamily()
if family != None:
ancestor_filter(database,family.getFather(),list)
ancestor_filter(database,family.getMother(),list)
ancestor_filter(database,family.getFather(),list,generations-1)
ancestor_filter(database,family.getMother(),list,generations-1)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def descendant_filter(database,person,list):
def descendant_filter(database,person,list,generations):
if person == None:
return
if person not in list:
list.append(person)
if generations <= 1:
return
for family in person.getFamilyList():
for child in family.getChildList():
descendant_filter(database,child,list)
descendant_filter(database,child,list,generations-1)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def an_des_filter(database,person,list):
def an_des_filter(database,person,list,generations):
descendant_filter(database,person,list)
ancestor_filter(database,person,list)
descendant_filter(database,person,list,generations)
ancestor_filter(database,person,list,generations)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def entire_db_filter(database,person,list):
def entire_db_filter(database,person,list,generations):
for entry in database.getPersonMap().values():
list.append(entry)
@ -99,100 +100,136 @@ filter_map = {
_("Entire Database") : entire_db_filter
}
_scaled = 0
_single = 1
_multiple = 2
pagecount_map = {
_("Single (scaled)") : _scaled,
_("Single") : _single,
_("Multiple") : _multiple,
}
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class GraphVizDialog(ReportDialog):
def __init__(self,database,person):
ReportDialog.__init__(self,database,person)
#------------------------------------------------------------------------
#
# Customization hooks
#
#------------------------------------------------------------------------
def get_title(self):
"""The window title for this dialog"""
return _("Gramps - Generate Relationship Graphs")
def get_target_browser_title(self):
"""The title of the window created when the 'browse' button is
clicked in the 'Save As' frame."""
return _("Graphviz File")
def get_print_pagecount_map(self):
"""Set up the list of possible page counts."""
return (pagecount_map, _("Single (scaled)"))
def get_report_generations(self):
"""Default to 10 generations, no page breaks."""
return (10, 0)
def get_report_filter_strings(self):
"""Set up the list of possible content filters."""
return filter_map.keys()
#------------------------------------------------------------------------
#
# Functions related to selecting/changing the current file format
#
#------------------------------------------------------------------------
def make_doc_menu(self):
"""Build a one item menu of document types that are
appropriate for this report."""
map = {"Graphviz (dot)" : None}
myMenu = utils.build_string_optmenu(map, None)
self.format_menu.set_menu(myMenu)
def make_document(self):
"""Do Nothing. This document will be created in the
make_report routine."""
pass
#------------------------------------------------------------------------
#
# Functions related to setting up the dialog window
#
#------------------------------------------------------------------------
def setup_style_frame(self):
"""The style frame is not used in this dialog."""
self.topDialog.get_widget("style_frame").hide()
#------------------------------------------------------------------------
#
# Functions related to retrieving data from the dialog window
#
#------------------------------------------------------------------------
def parse_style_frame(self):
"""The style frame is not used in this dialog."""
pass
#------------------------------------------------------------------------
#
# Functions related to creating the actual report document.
#
#------------------------------------------------------------------------
def make_report(self):
"""Create the object that will produce the GraphViz file."""
width = self.paper.get_width_inches()
height = self.paper.get_height_inches()
file = open(self.target_path,"w")
filter = filter_map[self.filter]
ind_list = []
filter(self.db,self.person,ind_list,self.max_gen)
file.write("digraph g {\n")
file.write("bgcolor=white;\n")
file.write("rankdir=LR;\n")
file.write("center=1;\n")
if self.pagecount == _scaled:
file.write("size=\"%3.1fin,%3.1fin\";\n" % (width-0.5,height-0.5))
file.write("ratio=compress;\n")
else:
file.write("ratio=auto;\n")
if self.pagecount == _multiple:
file.write("page=\"%3.1f,%3.1f\";\n" % (width,height))
if self.orien == PAPER_PORTRAIT:
file.write("orientation=portrait;\n")
else:
file.write("orientation=landscape;\n")
if len(ind_list) > 1:
dump_index(ind_list,file)
dump_person(ind_list,file)
file.write("}\n")
file.close()
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def report(database,person):
global active_person
global topDialog
global glade_file
global db
active_person = person
db = database
base = os.path.dirname(__file__)
glade_file = base + os.sep + "graphviz.glade"
dic = {
"destroy_passed_object" : utils.destroy_passed_object,
"on_ok_clicked" : on_ok_clicked,
}
topDialog = libglade.GladeXML(glade_file,"top")
topDialog.signal_autoconnect(dic)
top = topDialog.get_widget("top")
topDialog.get_widget("targetDirectory").set_default_path(os.getcwd())
filterName = topDialog.get_widget("filterName")
popdown_strings = filter_map.keys()
popdown_strings.sort()
filterName.set_popdown_strings(popdown_strings)
name = person.getPrimaryName().getName()
topDialog.get_widget("personName").set_text(name)
top.show()
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def on_ok_clicked(obj):
global active_person
global filter_map
global db
global glade_file
global ind_list
filterName = topDialog.get_widget("filter").get_text()
file_name = topDialog.get_widget("filename").get_text()
if file_name == "":
return
paper = topDialog.get_widget("paper")
multi = topDialog.get_widget("multi").get_active()
scaled = topDialog.get_widget("scaled").get_active()
portrait = topDialog.get_widget("portrait").get_active()
width = paper.get_width()/72.0
height = paper.get_height()/72.0
file = open(file_name,"w")
filter = filter_map[filterName]
ind_list = []
filter(db,active_person,ind_list)
file.write("digraph g {\n")
file.write("bgcolor=white;\n")
file.write("rankdir=LR;\n")
file.write("center=1;\n")
if scaled == 1:
file.write("size=\"%3.1fin,%3.1fin\";\n" % (width-0.5,height-0.5))
file.write("ratio=compress;\n")
else:
file.write("ratio=auto;\n")
if multi == 1:
file.write("page=\"%3.1f,%3.1f\";\n" % (width,height))
if portrait == 1:
file.write("orientation=portrait;\n")
else:
file.write("orientation=landscape;\n")
if len(ind_list) > 1:
dump_index(ind_list,file)
dump_person(ind_list,file)
file.write("}\n")
file.close()
utils.destroy_passed_object(obj)
GraphVizDialog(database,person)
#------------------------------------------------------------------------
#

View File

@ -32,21 +32,11 @@ _ = intl.gettext
from TextDoc import *
from StyleEditor import *
import FindDoc
from Report import *
import gtk
import libglade
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
active_person = None
db = None
styles = StyleSheet()
style_sheet_list = None
#------------------------------------------------------------------------
#
#
@ -326,145 +316,105 @@ class IndivSummary:
#
#
#------------------------------------------------------------------------
def report(database,person):
import PaperMenu
class IndivSummaryDialog(TextReportDialog):
def __init__(self,database,person):
ReportDialog.__init__(self,database,person)
global active_person
global topDialog
global db
global style_sheet_list
#------------------------------------------------------------------------
#
# Customization hooks
#
#------------------------------------------------------------------------
def get_title(self):
"""The window title for this dialog"""
return _("Gramps - Individual Summary")
if person == None:
return
def get_header(self, name):
"""The header line at the top of the dialog contents"""
return _("Individual Summary for %s") % name
def get_target_browser_title(self):
"""The title of the window created when the 'browse' button is
clicked in the 'Save As' frame."""
return _("Save Individual Summary")
active_person = person
db = database
glade_file = "%s/indsum.glade" % os.path.dirname(__file__)
topDialog = libglade.GladeXML(glade_file,"dialog1")
topDialog.get_widget("fileentry1").set_default_path(Config.report_dir)
name = person.getPrimaryName().getRegularName()
label = topDialog.get_widget("labelTitle")
def get_stylesheet_savefile(self):
"""Where to save styles for this report."""
return "family_group.xml"
label.set_text(_("Individual Summary for %s") % name)
def doc_uses_tables(self):
"""This report requires table support."""
return 1
PaperMenu.make_paper_menu(topDialog.get_widget("papersize"))
PaperMenu.make_orientation_menu(topDialog.get_widget("orientation"))
FindDoc.get_text_doc_menu(topDialog.get_widget("format"),1,option_switch)
font = FontStyle()
font.set_bold(1)
font.set_type_face(FONT_SANS_SERIF)
font.set_size(16)
p = ParagraphStyle()
p.set_alignment(PARA_ALIGN_CENTER)
p.set_font(font)
styles.add_style("Title",p)
font = FontStyle()
font.set_bold(1)
font.set_type_face(FONT_SANS_SERIF)
font.set_size(12)
font.set_italic(1)
p = ParagraphStyle()
p.set_font(font)
styles.add_style("TableTitle",p)
font = FontStyle()
font.set_bold(1)
font.set_type_face(FONT_SANS_SERIF)
font.set_size(12)
p = ParagraphStyle()
p.set_font(font)
styles.add_style("Spouse",p)
font = FontStyle()
font.set_size(12)
p = ParagraphStyle()
p.set_font(font)
styles.add_style("Normal",p)
style_sheet_list = StyleSheetList("individual_summary.xml",styles)
build_menu(None)
topDialog.signal_autoconnect({
"destroy_passed_object" : utils.destroy_passed_object,
"on_style_edit_clicked" : on_style_edit_clicked,
"on_save_clicked" : on_save_clicked
})
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def build_menu(object):
menu = topDialog.get_widget("style_menu")
myMenu = gtk.GtkMenu()
for style in style_sheet_list.get_style_names():
menuitem = gtk.GtkMenuItem(style)
menuitem.set_data("d",style_sheet_list.get_style_sheet(style))
menuitem.show()
myMenu.append(menuitem)
menu.set_menu(myMenu)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def on_style_edit_clicked(obj):
StyleListDisplay(style_sheet_list,build_menu,None)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def option_switch(obj):
val = obj.get_data("paper")
st = obj.get_data("styles")
notebook = topDialog.get_widget("option_notebook")
if val == 1:
notebook.set_page(0)
else:
notebook.set_page(1)
topDialog.get_widget("style_frame").set_sensitive(st)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def on_save_clicked(obj):
global active_person
global db
outputName = topDialog.get_widget("fileentry1").get_full_path(0)
if not outputName:
return
paper_obj = topDialog.get_widget("papersize")
paper = paper_obj.get_menu().get_active().get_data("i")
orien_obj = topDialog.get_widget("orientation")
orien = orien_obj.get_menu().get_active().get_data("i")
template = topDialog.get_widget("htmltemplate").get_full_path(0)
item = topDialog.get_widget("format").get_menu().get_active()
format = item.get_data("name")
styles = topDialog.get_widget("style_menu").get_menu().get_active().get_data("d")
doc = FindDoc.make_text_doc(styles,format,paper,orien,template)
MyReport = IndivSummary(db,active_person,outputName,doc)
MyReport.setup()
MyReport.write_report()
#------------------------------------------------------------------------
#
# Create output styles appropriate to this report.
#
#------------------------------------------------------------------------
def make_default_style(self):
"""Make the default output style for the Individual Summary Report."""
font = FontStyle()
font.set_bold(1)
font.set_type_face(FONT_SANS_SERIF)
font.set_size(16)
p = ParagraphStyle()
p.set_alignment(PARA_ALIGN_CENTER)
p.set_font(font)
self.default_style.add_style("Title",p)
utils.destroy_passed_object(obj)
font = FontStyle()
font.set_bold(1)
font.set_type_face(FONT_SANS_SERIF)
font.set_size(12)
font.set_italic(1)
p = ParagraphStyle()
p.set_font(font)
self.default_style.add_style("TableTitle",p)
font = FontStyle()
font.set_bold(1)
font.set_type_face(FONT_SANS_SERIF)
font.set_size(12)
p = ParagraphStyle()
p.set_font(font)
self.default_style.add_style("Spouse",p)
font = FontStyle()
font.set_size(12)
p = ParagraphStyle()
p.set_font(font)
self.default_style.add_style("Normal",p)
#------------------------------------------------------------------------
#
# Functions related to setting up the dialog window
#
#------------------------------------------------------------------------
def setup_report_options(self):
"""The 'Report Options' frame is not used in this dialog."""
self.topDialog.get_widget("options_frame").hide()
#------------------------------------------------------------------------
#
# Create the contents of the report.
#
#------------------------------------------------------------------------
def make_report(self):
"""Create the object that will produce the Ancestor Chart.
All user dialog has already been handled and the output file
opened."""
MyReport = IndivSummary(self.db, self.person, self.target_path, self.doc)
MyReport.setup()
MyReport.write_report()
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def report(database,person):
IndivSummaryDialog(database,person)
#------------------------------------------------------------------------
#

View File

@ -21,7 +21,6 @@
"Web Site/Generate Web Site"
from RelLib import *
from TextDoc import *
from HtmlDoc import *
import const
@ -40,20 +39,7 @@ import shutil
from gtk import *
from gnome.ui import *
from libglade import *
from StyleEditor import *
active_person = None
db = None
topDialog = None
glade_file = os.path.dirname(__file__) + os.sep + "webpage.glade"
restrict = 1
private = 1
restrict_photos = 0
no_photos = 0
styles = StyleSheet()
style_sheet_list = None
from Report import *
#------------------------------------------------------------------------
@ -406,30 +392,21 @@ class IndividualPage:
if place != "" and place[-1] == ".":
place = place[0:-1]
else:
place = ""
if descr != "" and descr[-1] == ".":
descr = descr[0:-1]
if date == "":
if place == "":
if descr == "":
val = ""
else:
val = "%s." % descr
if date != "":
if place != "":
val = "%s, %s." % (date,place)
else:
if descr == "":
val = ""
else:
val = "%s. %s." % (place,descr)
val = "%s." % date
elif place != "":
val = "%s." % place
else:
if place == "":
if descr == "":
val = "%s." % date
else:
val = "%s. %s." % (date,descr)
else:
val = "%s, %s. %s." % (date,place,descr)
val = ""
if descr != "":
val = val + ("%s." % descr)
self.write_normal_row(name, val, srcref)
@ -463,7 +440,7 @@ class IndividualPage:
if event == None:
return
name = event.getName()
name = _(event.getName())
date = event.getDate()
place = event.getPlaceName()
descr = event.getDescription()
@ -576,7 +553,7 @@ class IndividualPage:
#
#
#------------------------------------------------------------------------
def individual_filter(database,person,list):
def individual_filter(database,person,list,generations):
list.append(person)
#------------------------------------------------------------------------
@ -584,48 +561,54 @@ def individual_filter(database,person,list):
#
#
#------------------------------------------------------------------------
def ancestor_filter(database,person,list):
def ancestor_filter(database,person,list,generations):
if person == None:
return
if person not in list:
list.append(person)
if generations <= 1:
return
family = person.getMainFamily()
if family != None:
ancestor_filter(database,family.getFather(),list)
ancestor_filter(database,family.getMother(),list)
ancestor_filter(database,family.getFather(),list,generations-1)
ancestor_filter(database,family.getMother(),list,generations-1)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def descendant_filter(database,person,list):
def descendant_filter(database,person,list,generations):
if person == None or person in list:
return
if person not in list:
list.append(person)
if generations <= 1:
return
for family in person.getFamilyList():
for child in family.getChildList():
descendant_filter(database,child,list)
descendant_filter(database,child,list,generations-1)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def an_des_filter(database,person,list):
def an_des_filter(database,person,list,generations):
descendant_filter(database,person,list)
ancestor_filter(database,person,list)
descendant_filter(database,person,list,generations)
ancestor_filter(database,person,list,generations)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def entire_db_filter(database,person,list):
def entire_db_filter(database,person,list,generations):
for entry in database.getPersonMap().values():
list.append(entry)
@ -635,7 +618,7 @@ def entire_db_filter(database,person,list):
#
#
#------------------------------------------------------------------------
def an_des_of_gparents_filter(database,person,list):
def an_des_of_gparents_filter(database,person,list,generations):
my_list = []
@ -653,8 +636,8 @@ def an_des_of_gparents_filter(database,person,list):
my_list.append(pf.getMother())
for person in my_list:
descendant_filter(database,person,list)
ancestor_filter(database,person,list)
descendant_filter(database,person,list,generations)
ancestor_filter(database,person,list,generations)
#------------------------------------------------------------------------
#
@ -676,275 +659,359 @@ filter_map = {
#
#
#------------------------------------------------------------------------
def report(database,person):
global active_person
global topDialog
global db
global styles
global style_sheet_list
class WebReport(Report):
def __init__(self,db,person,target_path,max_gen,photos,filter,restrict,
private, srccomments, include_link, style, template_name):
self.db = db
self.person = person
self.target_path = target_path
self.max_gen = max_gen
self.photos = photos
self.filter = filter
self.restrict = restrict
self.private = private
self.srccomments = srccomments
self.include_link = include_link
self.selected_style = style
self.template_name = template_name
def get_progressbar_data(self):
return (_("Gramps - Generate HTML reports"), _("Creating Web Pages"))
active_person = person
db = database
font = FontStyle()
font.set(bold=1, face=FONT_SANS_SERIF, size=16)
p = ParagraphStyle()
p.set(align=PARA_ALIGN_CENTER,font=font)
styles.add_style("Title",p)
#------------------------------------------------------------------------
#
# Writes a index file, listing all people in the person list.
#
#------------------------------------------------------------------------
def dump_index(self,person_list,styles,template,html_dir):
font = FontStyle()
font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1)
p = ParagraphStyle()
p.set(font=font,bborder=1)
styles.add_style("EventsTitle",p)
font = FontStyle()
font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1)
p = ParagraphStyle()
p.set(font=font,bborder=1)
styles.add_style("NotesTitle",p)
font = FontStyle()
font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1)
p = ParagraphStyle()
p.set(font=font,bborder=1)
styles.add_style("SourcesTitle",p)
font = FontStyle()
font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1)
p = ParagraphStyle()
p.set(font=font,bborder=1)
styles.add_style("GalleryTitle",p)
font = FontStyle()
font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1)
p = ParagraphStyle()
p.set(font=font,bborder=1)
styles.add_style("FamilyTitle",p)
doc = HtmlLinkDoc(styles,template)
doc.set_title(_("Family Tree Index"))
font = FontStyle()
font.set(bold=1,face=FONT_SANS_SERIF,size=12)
p = ParagraphStyle()
p.set_font(font)
styles.add_style("Spouse",p)
font = FontStyle()
font.set(size=12,italic=1)
p = ParagraphStyle()
p.set_font(font)
styles.add_style("Label",p)
font = FontStyle()
font.set_size(12)
p = ParagraphStyle()
p.set_font(font)
styles.add_style("Data",p)
font = FontStyle()
font.set(bold=1,face=FONT_SANS_SERIF,size=12)
p = ParagraphStyle()
p.set_font(font)
styles.add_style("PhotoDescription",p)
font = FontStyle()
font.set(size=12)
p = ParagraphStyle()
p.set_font(font)
styles.add_style("PhotoNote",p)
font = FontStyle()
font.set_size(10)
p = ParagraphStyle()
p.set_font(font)
styles.add_style("SourceParagraph",p)
font = FontStyle()
font.set_size(12)
p = ParagraphStyle()
p.set_font(font)
styles.add_style("NotesParagraph",p)
style_sheet_list = StyleSheetList("webpage.xml",styles)
dic = {
"destroy_passed_object" : utils.destroy_passed_object,
"on_nophotos_toggled" : on_nophotos_toggled,
"on_style_edit_clicked" : on_style_edit_clicked,
"on_ok_clicked" : on_ok_clicked,
}
topDialog = GladeXML(glade_file,"top")
topDialog.signal_autoconnect(dic)
build_menu(None)
doc.open(html_dir + os.sep + "index.html")
doc.start_paragraph("Title")
doc.write_text(_("Family Tree Index"))
doc.end_paragraph()
top = topDialog.get_widget("top")
topDialog.get_widget("targetDirectory").set_default_path(Config.web_dir)
topDialog.get_widget("tgtdir").set_text(Config.web_dir)
filterName = topDialog.get_widget("filterName")
popdown_strings = filter_map.keys()
popdown_strings.sort()
filterName.set_popdown_strings(popdown_strings)
name = person.getPrimaryName().getName()
topDialog.get_widget("personName").set_text(name)
top.show()
person_list.sort(sort.by_last_name)
for person in person_list:
name = person.getPrimaryName().getName()
doc.start_link("%s.html" % person.getId())
doc.write_text(name)
doc.end_link()
doc.newline()
doc.close()
def write_report(self):
dir_name = self.target_path
if dir_name == None:
dir_name = os.getcwd()
elif not os.path.isdir(dir_name):
parent_dir = os.path.dirname(dir_name)
if not os.path.isdir(parent_dir):
GnomeErrorDialog(_("Neither %s nor %s are directories") % \
(dir_name,parent_dir))
return
else:
try:
os.mkdir(dir_name)
except IOError, value:
GnomeErrorDialog(_("Could not create the directory : %s") % \
dir_name + "\n" + value[1])
return
except:
GnomeErrorDialog(_("Could not create the directory : %s") % \
dir_name)
return
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def on_style_edit_clicked(obj):
StyleListDisplay(style_sheet_list,build_menu,None)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def build_menu(object):
menu = topDialog.get_widget("style_menu")
myMenu = GtkMenu()
for style in style_sheet_list.get_style_names():
menuitem = GtkMenuItem(style)
menuitem.set_data("d",style_sheet_list.get_style_sheet(style))
menuitem.show()
myMenu.append(menuitem)
menu.set_menu(myMenu)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def on_nophotos_toggled(obj):
if obj.get_active():
topDialog.get_widget("restrict_photos").set_sensitive(0)
else:
topDialog.get_widget("restrict_photos").set_sensitive(1)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
def on_ok_clicked(obj):
global active_person
global filter_map
global db
filterName = topDialog.get_widget("filter").get_text()
dir_name = topDialog.get_widget("targetDirectory").get_full_path(0)
templ_name = topDialog.get_widget("htmlTemplate").get_full_path(0)
restrict = topDialog.get_widget("restrict").get_active()
private = topDialog.get_widget("private").get_active()
srccomments = topDialog.get_widget("srccomments").get_active()
restrict_photos = topDialog.get_widget("restrict_photos").get_active()
no_photos = topDialog.get_widget("nophotos").get_active()
include_link = topDialog.get_widget("include_link").get_active()
if dir_name == None:
dir_name = os.getcwd()
elif not os.path.isdir(dir_name):
parent_dir = os.path.dirname(dir_name)
if not os.path.isdir(parent_dir):
GnomeErrorDialog(_("Neither %s nor %s are directories") % \
(dir_name,parent_dir))
return
else:
image_dir_name = os.path.join(dir_name, "images")
if not os.path.isdir(image_dir_name) and self.photos != 0:
try:
os.mkdir(dir_name)
os.mkdir(image_dir_name)
except IOError, value:
GnomeErrorDialog(_("Could not create the directory : %s") % \
dir_name + "\n" + value[1])
image_dir_name + "\n" + value[1])
return
except:
GnomeErrorDialog(_("Could not create the directory : %s") % \
dir_name)
image_dir_name)
return
image_dir_name = os.path.join(dir_name, "images")
if not os.path.isdir(image_dir_name) and not no_photos:
try:
os.mkdir(image_dir_name)
except IOError, value:
GnomeErrorDialog(_("Could not create the directory : %s") % \
image_dir_name + "\n" + value[1])
return
except:
GnomeErrorDialog(_("Could not create the directory : %s") % \
image_dir_name)
return
filter = filter_map[filterName]
ind_list = []
filter(db,active_person,ind_list)
styles = topDialog.get_widget("style_menu").get_menu().get_active().get_data("d")
if no_photos == 1:
photos = 0
elif restrict_photos == 1:
photos = 1
else:
photos = 2
total = float(len(ind_list))
index = 0.0
pxml = GladeXML(glade_file,"progress")
ptop = pxml.get_widget("progress")
pbar = pxml.get_widget("progressbar")
pbar.configure(0.0,0.0,total)
doc = HtmlLinkDoc(styles,templ_name)
my_map = {}
for l in ind_list:
my_map[l] = 1
for person in ind_list:
tdoc = HtmlLinkDoc(styles,None,doc)
idoc = IndividualPage(person,photos,restrict,private,srccomments,\
include_link,my_map,dir_name,tdoc)
idoc.create_page()
idoc.close()
index = index + 1.0
pbar.set_value(index)
while events_pending():
mainiteration()
filter = filter_map[self.filter]
ind_list = []
filter(self.db,self.person,ind_list,self.max_gen)
self.progress_bar_setup(float(len(ind_list)))
if len(ind_list) > 1:
dump_index(ind_list,styles,templ_name,dir_name)
doc = HtmlLinkDoc(self.selected_style,self.template_name)
my_map = {}
for l in ind_list:
my_map[l] = 1
for person in ind_list:
tdoc = HtmlLinkDoc(self.selected_style,None,doc)
idoc = IndividualPage(person, self.photos, self.restrict,
self.private, self.srccomments,
self.include_link, my_map, dir_name, tdoc)
idoc.create_page()
idoc.close()
self.progress_bar_step()
while events_pending():
mainiteration()
if len(ind_list) > 1:
self.dump_index(ind_list,self.selected_style,self.template_name,dir_name)
self.progress_bar_done()
utils.destroy_passed_object(ptop)
utils.destroy_passed_object(obj)
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class WebReportDialog(ReportDialog):
def __init__(self,database,person):
ReportDialog.__init__(self,database,person,"webpage.glade")
#------------------------------------------------------------------------
#
# Customization hooks
#
#------------------------------------------------------------------------
def get_title(self):
"""The window title for this dialog"""
return _("Gramps - Generate HTML reports")
def get_target_browser_title(self):
"""The title of the window created when the 'browse' button is
clicked in the 'Save As' frame."""
return _("Target Directory")
def get_target_is_directory(self):
"""This report creates a directory full of files, not a single file."""
return 1
def get_stylesheet_savefile(self):
"""Where to save styles for this report."""
return "webpage.xml"
def get_report_generations(self):
"""Default to ten generations, no page break box."""
return (10, 0)
def get_report_filter_strings(self):
"""Set up the list of possible content filters."""
return filter_map.keys()
#------------------------------------------------------------------------
#
# Functions related to the default directory
#
#------------------------------------------------------------------------
def get_default_directory(self):
"""Get the name of the directory to which the target dialog
box should default. This value can be set in the preferences
panel."""
return Config.web_dir
def set_default_directory(self, value):
"""Save the name of the current directory, so that any future
reports will default to the most recently used directory.
This also changes the directory name that will appear in the
preferences panel, but does not change the preference in disk.
This means that the last directory used will only be
remembered for this session of gramps unless the user saves
his/her preferences."""
Config.web_dir = value
#------------------------------------------------------------------------
#
# Create output style appropriate to this report.
#
#------------------------------------------------------------------------
def make_default_style(self):
"""Make the default output style for the Web Pages Report."""
font = FontStyle()
font.set(bold=1, face=FONT_SANS_SERIF, size=16)
p = ParagraphStyle()
p.set(align=PARA_ALIGN_CENTER,font=font)
self.default_style.add_style("Title",p)
font = FontStyle()
font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1)
p = ParagraphStyle()
p.set(font=font,bborder=1)
self.default_style.add_style("EventsTitle",p)
font = FontStyle()
font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1)
p = ParagraphStyle()
p.set(font=font,bborder=1)
self.default_style.add_style("NotesTitle",p)
font = FontStyle()
font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1)
p = ParagraphStyle()
p.set(font=font,bborder=1)
self.default_style.add_style("SourcesTitle",p)
font = FontStyle()
font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1)
p = ParagraphStyle()
p.set(font=font,bborder=1)
self.default_style.add_style("GalleryTitle",p)
font = FontStyle()
font.set(bold=1,face=FONT_SANS_SERIF,size=12,italic=1)
p = ParagraphStyle()
p.set(font=font,bborder=1)
self.default_style.add_style("FamilyTitle",p)
font = FontStyle()
font.set(bold=1,face=FONT_SANS_SERIF,size=12)
p = ParagraphStyle()
p.set_font(font)
self.default_style.add_style("Spouse",p)
font = FontStyle()
font.set(size=12,italic=1)
p = ParagraphStyle()
p.set_font(font)
self.default_style.add_style("Label",p)
font = FontStyle()
font.set_size(12)
p = ParagraphStyle()
p.set_font(font)
self.default_style.add_style("Data",p)
font = FontStyle()
font.set(bold=1,face=FONT_SANS_SERIF,size=12)
p = ParagraphStyle()
p.set_font(font)
self.default_style.add_style("PhotoDescription",p)
font = FontStyle()
font.set(size=12)
p = ParagraphStyle()
p.set_font(font)
self.default_style.add_style("PhotoNote",p)
font = FontStyle()
font.set_size(10)
p = ParagraphStyle()
p.set_font(font)
self.default_style.add_style("SourceParagraph",p)
font = FontStyle()
font.set_size(12)
p = ParagraphStyle()
p.set_font(font)
self.default_style.add_style("NotesParagraph",p)
#------------------------------------------------------------------------
#
# Functions related to selecting/changing the current file format
#
#------------------------------------------------------------------------
def make_document(self):
"""Do Nothing. This document will be created in the
make_report routine."""
pass
#------------------------------------------------------------------------
#
# Functions related to setting up the dialog window
#
#------------------------------------------------------------------------
def setup_format_frame(self):
"""The format frame is not used in this dialog. Hide it, and
set the output notebook to always display the html template
page."""
self.topDialog.get_widget("format_frame").hide()
self.output_notebook.set_page(1)
def setup_other_frames(self):
"""Set up the privacy frame of the dialog. This sole purpose of
this function is to grab a pointer for later use in a callback
routine."""
self.restrict_photos_check = self.topDialog.get_widget("restrict_photos")
def connect_signals(self):
"""Connect the signal handlers for this dialog. This routine
uses the parent routine to connect the common handlers, and
the connects its own unique handler."""
ReportDialog.connect_signals(self)
self.topDialog.signal_autoconnect({
"on_nophotos_toggled" : self.on_nophotos_toggled,
})
#------------------------------------------------------------------------
#
# Functions related to retrieving data from the dialog window
#
#------------------------------------------------------------------------
def parse_format_frame(self):
"""The format frame is not used in this dialog."""
pass
def parse_report_options_frame(self):
"""Parse the report options frame of the dialog. Save the
user selected choices for later use."""
ReportDialog.parse_report_options_frame(self)
self.include_link = self.topDialog.get_widget("include_link").get_active()
def parse_other_frames(self):
"""Parse the privacy options frame of the dialog. Save the
user selected choices for later use."""
self.restrict = self.topDialog.get_widget("restrict").get_active()
self.private = self.topDialog.get_widget("private").get_active()
self.srccomments = self.topDialog.get_widget("srccomments").get_active()
if (self.topDialog.get_widget("nophotos").get_active() == 1):
self.photos = 0
elif (self.restrict_photos_check.get_active() == 1):
self.photos = 1
else:
self.photos = 2
#------------------------------------------------------------------------
#
# Callback functions from the dialog
#
#------------------------------------------------------------------------
def on_nophotos_toggled(obj):
"""Keep the 'restrict photos' checkbox in line with the 'no
photos' checkbox. If there are no photos included, it makes
no sense to worry about restricting which photos are included,
now does it?"""
if obj.get_active():
self.restrict_photos_check.set_sensitive(0)
else:
self.restrict_photos_check.set_sensitive(1)
#------------------------------------------------------------------------
#
# Functions related to creating the actual report document.
#
#------------------------------------------------------------------------
def make_report(self):
"""Create the object that will produce the web pages."""
MyReport = WebReport(self.db, self.person, self.target_path,
self.max_gen, self.photos, self.filter,
self.restrict, self.private, self.srccomments,
self.include_link, self.selected_style,
self.template_name)
MyReport.write_report()
#------------------------------------------------------------------------
#
# Writes a index file, listing all people in the person list.
#
#
#------------------------------------------------------------------------
def dump_index(person_list,styles,template,html_dir):
doc = HtmlLinkDoc(styles,template)
doc.set_title(_("Family Tree Index"))
doc.open(html_dir + os.sep + "index.html")
doc.start_paragraph("Title")
doc.write_text(_("Family Tree Index"))
doc.end_paragraph()
person_list.sort(sort.by_last_name)
for person in person_list:
name = person.getPrimaryName().getName()
doc.start_link("%s.html" % person.getId())
doc.write_text(name)
doc.end_link()
doc.newline()
doc.close()
def report(database,person):
WebReportDialog(database,person)
#-------------------------------------------------------------------------
#

View File

@ -1,504 +0,0 @@
<?xml version="1.0"?>
<GTK-Interface>
<project>
<name>ancestorreport</name>
<program_name>ancestorreport</program_name>
<directory></directory>
<source_directory>src</source_directory>
<pixmaps_directory></pixmaps_directory>
<language>C</language>
<gnome_support>True</gnome_support>
<gettext_support>True</gettext_support>
</project>
<widget>
<class>GnomeDialog</class>
<name>dialog1</name>
<title>Gramps - Ancestor Chart</title>
<type>GTK_WINDOW_DIALOG</type>
<position>GTK_WIN_POS_NONE</position>
<modal>False</modal>
<allow_shrink>False</allow_shrink>
<allow_grow>False</allow_grow>
<auto_shrink>False</auto_shrink>
<auto_close>False</auto_close>
<hide_on_close>False</hide_on_close>
<widget>
<class>GtkVBox</class>
<child_name>GnomeDialog:vbox</child_name>
<name>dialog-vbox2</name>
<homogeneous>False</homogeneous>
<spacing>8</spacing>
<child>
<padding>4</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHButtonBox</class>
<child_name>GnomeDialog:action_area</child_name>
<name>dialog-action_area2</name>
<layout_style>GTK_BUTTONBOX_END</layout_style>
<spacing>8</spacing>
<child_min_width>85</child_min_width>
<child_min_height>27</child_min_height>
<child_ipad_x>7</child_ipad_x>
<child_ipad_y>0</child_ipad_y>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
<pack>GTK_PACK_END</pack>
</child>
<widget>
<class>GtkButton</class>
<name>button14</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_save_clicked</handler>
<object>dialog1</object>
<last_modification_time>Thu, 15 Mar 2001 23:13:39 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
</widget>
<widget>
<class>GtkButton</class>
<name>button16</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>destroy_passed_object</handler>
<object>dialog1</object>
<last_modification_time>Thu, 15 Mar 2001 23:13:20 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
</widget>
</widget>
<widget>
<class>GtkVBox</class>
<name>vbox3</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>labelTitle</name>
<label>Ancestor Chart</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkHSeparator</class>
<name>hseparator1</name>
<child>
<padding>5</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkHBox</class>
<name>hbox2</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>5</padding>
<expand>False</expand>
<fill>False</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label12</name>
<label>Save As</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GnomeFileEntry</class>
<name>fileentry1</name>
<width>350</width>
<history_id>ancestor_chart</history_id>
<max_saved>10</max_saved>
<title>Save Ancestor Chart</title>
<directory>False</directory>
<modal>False</modal>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GnomeEntry:entry</child_name>
<name>filename</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>frame1</name>
<border_width>5</border_width>
<label>Format</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>10</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkOptionMenu</class>
<name>format</name>
<border_width>5</border_width>
<can_focus>True</can_focus>
<items>OpenOffice
</items>
<initial_choice>0</initial_choice>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>style_frame</name>
<border_width>5</border_width>
<label>Styles</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHBox</class>
<name>hbox3</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkOptionMenu</class>
<name>style_menu</name>
<border_width>10</border_width>
<can_focus>True</can_focus>
<items>default
</items>
<initial_choice>0</initial_choice>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkButton</class>
<name>button17</name>
<border_width>10</border_width>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_style_edit_clicked</handler>
<object>dialog1</object>
<last_modification_time>Tue, 05 Jun 2001 14:39:29 GMT</last_modification_time>
</signal>
<label>Style Editor</label>
<relief>GTK_RELIEF_NORMAL</relief>
<child>
<padding>5</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>frame2</name>
<border_width>5</border_width>
<label>Options</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkTable</class>
<name>table1</name>
<rows>4</rows>
<columns>2</columns>
<homogeneous>False</homogeneous>
<row_spacing>0</row_spacing>
<column_spacing>0</column_spacing>
<widget>
<class>GtkLabel</class>
<name>label13</name>
<label>Generations</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>2</top_attach>
<bottom_attach>3</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>label14</name>
<label>Paper</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>label15</name>
<label>Orientation</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>papersize</name>
<can_focus>True</can_focus>
<items>Letter
</items>
<initial_choice>0</initial_choice>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>orientation</name>
<can_focus>True</can_focus>
<items>Portrait
</items>
<initial_choice>0</initial_choice>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkSpinButton</class>
<name>generations</name>
<can_focus>True</can_focus>
<climb_rate>1</climb_rate>
<digits>0</digits>
<numeric>True</numeric>
<update_policy>GTK_UPDATE_ALWAYS</update_policy>
<snap>False</snap>
<wrap>False</wrap>
<value>10</value>
<lower>1</lower>
<upper>28</upper>
<step>1</step>
<page>10</page>
<page_size>10</page_size>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>2</top_attach>
<bottom_attach>3</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkScrolledWindow</class>
<name>scrolledwindow1</name>
<height>55</height>
<hscrollbar_policy>GTK_POLICY_NEVER</hscrollbar_policy>
<vscrollbar_policy>GTK_POLICY_ALWAYS</vscrollbar_policy>
<hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
<vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>3</top_attach>
<bottom_attach>4</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>True</yfill>
</child>
<widget>
<class>GtkText</class>
<name>display_text</name>
<tooltip>Allows you to customize the data in the boxes in the report</tooltip>
<can_focus>True</can_focus>
<editable>True</editable>
<text>$n
b. $b
d. $d</text>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<name>label16</name>
<label>Display Format</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0</yalign>
<xpad>5</xpad>
<ypad>5</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>3</top_attach>
<bottom_attach>4</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>True</yfill>
</child>
</widget>
</widget>
</widget>
</widget>
</widget>
</widget>
</GTK-Interface>

View File

@ -1,640 +0,0 @@
<?xml version="1.0"?>
<GTK-Interface>
<project>
<name>ancestorreport</name>
<program_name>ancestorreport</program_name>
<directory></directory>
<source_directory>src</source_directory>
<pixmaps_directory></pixmaps_directory>
<language>C</language>
<gnome_support>True</gnome_support>
<gettext_support>True</gettext_support>
</project>
<widget>
<class>GnomeDialog</class>
<name>dialog1</name>
<title>Gramps - Ahnentafel Report</title>
<type>GTK_WINDOW_TOPLEVEL</type>
<position>GTK_WIN_POS_NONE</position>
<modal>False</modal>
<allow_shrink>False</allow_shrink>
<allow_grow>False</allow_grow>
<auto_shrink>False</auto_shrink>
<auto_close>False</auto_close>
<hide_on_close>False</hide_on_close>
<widget>
<class>GtkVBox</class>
<child_name>GnomeDialog:vbox</child_name>
<name>dialog-vbox2</name>
<homogeneous>False</homogeneous>
<spacing>8</spacing>
<child>
<padding>4</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHButtonBox</class>
<child_name>GnomeDialog:action_area</child_name>
<name>dialog-action_area2</name>
<layout_style>GTK_BUTTONBOX_END</layout_style>
<spacing>8</spacing>
<child_min_width>85</child_min_width>
<child_min_height>27</child_min_height>
<child_ipad_x>7</child_ipad_x>
<child_ipad_y>0</child_ipad_y>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
<pack>GTK_PACK_END</pack>
</child>
<widget>
<class>GtkButton</class>
<name>button14</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_save_clicked</handler>
<object>dialog1</object>
<last_modification_time>Thu, 15 Mar 2001 23:13:39 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
</widget>
<widget>
<class>GtkButton</class>
<name>button16</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>destroy_passed_object</handler>
<object>dialog1</object>
<last_modification_time>Thu, 15 Mar 2001 23:13:20 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
</widget>
</widget>
<widget>
<class>GtkVBox</class>
<name>vbox3</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>labelTitle</name>
<label>Ahnentafel Report</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkHSeparator</class>
<name>hseparator1</name>
<child>
<padding>5</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkHBox</class>
<name>hbox2</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>5</padding>
<expand>False</expand>
<fill>False</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label12</name>
<label>Save As</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GnomeFileEntry</class>
<name>fileentry1</name>
<width>350</width>
<history_id>ancestor_report</history_id>
<max_saved>10</max_saved>
<title>Save Ancestor Report</title>
<directory>False</directory>
<modal>False</modal>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GnomeEntry:entry</child_name>
<name>filename</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>frame1</name>
<border_width>3</border_width>
<label>Format</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>10</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkOptionMenu</class>
<name>format</name>
<border_width>10</border_width>
<can_focus>True</can_focus>
<items>
</items>
<initial_choice>0</initial_choice>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>style_frame</name>
<border_width>5</border_width>
<label>Styles</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHBox</class>
<name>hbox4</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkOptionMenu</class>
<name>style_menu</name>
<border_width>10</border_width>
<can_focus>True</can_focus>
<items>default
</items>
<initial_choice>0</initial_choice>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkButton</class>
<name>style_edit</name>
<border_width>10</border_width>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_style_edit_clicked</handler>
<object>dialog1</object>
<last_modification_time>Tue, 05 Jun 2001 14:39:29 GMT</last_modification_time>
</signal>
<label>Style Editor</label>
<relief>GTK_RELIEF_NORMAL</relief>
<child>
<padding>5</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>frame2</name>
<border_width>4</border_width>
<label>Options</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkVBox</class>
<name>vbox5</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkHBox</class>
<name>hbox3</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkVBox</class>
<name>vbox6</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkTable</class>
<name>table1</name>
<rows>3</rows>
<columns>2</columns>
<homogeneous>False</homogeneous>
<row_spacing>0</row_spacing>
<column_spacing>0</column_spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label13</name>
<label>Generations</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkCheckButton</class>
<name>pagebreak</name>
<can_focus>True</can_focus>
<label>Page break between generations</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkSpinButton</class>
<name>generations</name>
<can_focus>True</can_focus>
<climb_rate>1</climb_rate>
<digits>0</digits>
<numeric>True</numeric>
<update_policy>GTK_UPDATE_ALWAYS</update_policy>
<snap>False</snap>
<wrap>False</wrap>
<value>10</value>
<lower>1</lower>
<upper>28</upper>
<step>1</step>
<page>10</page>
<page_size>10</page_size>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkHSeparator</class>
<name>hseparator2</name>
<child>
<left_attach>0</left_attach>
<right_attach>2</right_attach>
<top_attach>2</top_attach>
<bottom_attach>3</bottom_attach>
<xpad>0</xpad>
<ypad>5</ypad>
<xexpand>False</xexpand>
<yexpand>True</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>True</yfill>
</child>
</widget>
</widget>
<widget>
<class>GtkNotebook</class>
<name>option_notebook</name>
<show_tabs>False</show_tabs>
<show_border>False</show_border>
<tab_pos>GTK_POS_TOP</tab_pos>
<scrollable>False</scrollable>
<tab_hborder>2</tab_hborder>
<tab_vborder>2</tab_vborder>
<popup_enable>False</popup_enable>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkTable</class>
<name>table2</name>
<rows>2</rows>
<columns>2</columns>
<homogeneous>False</homogeneous>
<row_spacing>0</row_spacing>
<column_spacing>0</column_spacing>
<widget>
<class>GtkLabel</class>
<name>label14</name>
<label>Paper</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>label15</name>
<label>Orientation</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>papersize</name>
<can_focus>True</can_focus>
<items>
</items>
<initial_choice>0</initial_choice>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>orientation</name>
<can_focus>True</can_focus>
<items>
</items>
<initial_choice>0</initial_choice>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<child_name>Notebook:tab</child_name>
<name>label14</name>
<label>Paper</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
</widget>
<widget>
<class>GtkVBox</class>
<name>vbox7</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkHBox</class>
<name>hbox1</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>5</padding>
<expand>False</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label11</name>
<label>Template</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GnomeFileEntry</class>
<name>htmltemplate</name>
<history_id>HtmlTemplate</history_id>
<max_saved>10</max_saved>
<title>Choose the HTML template</title>
<directory>False</directory>
<modal>False</modal>
<child>
<padding>5</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GnomeEntry:entry</child_name>
<name>htmlfile</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
</widget>
<widget>
<class>Placeholder</class>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<child_name>Notebook:tab</child_name>
<name>label15</name>
<label>Template</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
</widget>
</widget>
</widget>
</widget>
</widget>
</widget>
</widget>
</widget>
</widget>
</GTK-Interface>

View File

@ -0,0 +1,926 @@
<?xml version="1.0"?>
<GTK-Interface>
<project>
<name>Basicreport</name>
<program_name>basicreport</program_name>
<directory></directory>
<source_directory>src</source_directory>
<pixmaps_directory>pixmaps</pixmaps_directory>
<language>C</language>
<gnome_support>True</gnome_support>
<gettext_support>True</gettext_support>
</project>
<widget>
<class>GnomeDialog</class>
<name>report_dialog</name>
<title>Basic Report</title>
<type>GTK_WINDOW_TOPLEVEL</type>
<position>GTK_WIN_POS_NONE</position>
<modal>False</modal>
<allow_shrink>False</allow_shrink>
<allow_grow>False</allow_grow>
<auto_shrink>False</auto_shrink>
<auto_close>False</auto_close>
<hide_on_close>False</hide_on_close>
<widget>
<class>GtkVBox</class>
<child_name>GnomeDialog:vbox</child_name>
<name>dialog-vbox1</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>4</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHButtonBox</class>
<child_name>GnomeDialog:action_area</child_name>
<name>dialog-action_area1</name>
<layout_style>GTK_BUTTONBOX_END</layout_style>
<spacing>8</spacing>
<child_min_width>85</child_min_width>
<child_min_height>27</child_min_height>
<child_ipad_x>7</child_ipad_x>
<child_ipad_y>0</child_ipad_y>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
<pack>GTK_PACK_END</pack>
</child>
<widget>
<class>GtkButton</class>
<name>OK</name>
<can_default>True</can_default>
<has_default>True</has_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_ok_clicked</handler>
<object>report_dialog</object>
<last_modification_time>Tue, 18 Dec 2001 09:50:07 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
</widget>
<widget>
<class>GtkButton</class>
<name>Cancel</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>destroy_passed_object</handler>
<object>report_dialog</object>
<last_modification_time>Sun, 16 Dec 2001 07:52:14 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
</widget>
</widget>
<widget>
<class>GtkVBox</class>
<name>dialog_body</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>header_label</name>
<label>Basic Report Template</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkHSeparator</class>
<name>hseparator1</name>
<child>
<padding>5</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkFrame</class>
<name>format_frame</name>
<border_width>4</border_width>
<label>Save As</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHBox</class>
<name>save_hbox</name>
<border_width>4</border_width>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkLabel</class>
<name>saveas</name>
<label>Filename</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GnomeFileEntry</class>
<name>fileentry1</name>
<width>350</width>
<history_id>file_name</history_id>
<max_saved>10</max_saved>
<title>Save Report</title>
<directory>False</directory>
<modal>False</modal>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GnomeEntry:entry</child_name>
<name>filename</name>
<can_focus>True</can_focus>
<has_focus>True</has_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>format_frame</name>
<border_width>4</border_width>
<label>Format</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkOptionMenu</class>
<name>format</name>
<border_width>7</border_width>
<can_focus>True</can_focus>
<items>AbiWord
</items>
<initial_choice>0</initial_choice>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>style_frame</name>
<border_width>4</border_width>
<label>Styles</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHBox</class>
<name>style_hbox</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkOptionMenu</class>
<name>style_menu</name>
<border_width>7</border_width>
<can_focus>True</can_focus>
<items>default
</items>
<initial_choice>0</initial_choice>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkButton</class>
<name>style_edit</name>
<border_width>10</border_width>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_style_edit_clicked</handler>
<object>dialog1</object>
<last_modification_time>Sun, 16 Dec 2001 07:52:56 GMT</last_modification_time>
</signal>
<label>Style Editor</label>
<relief>GTK_RELIEF_NORMAL</relief>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
</widget>
</widget>
<widget>
<class>GtkNotebook</class>
<name>output_notebook</name>
<border_width>4</border_width>
<show_tabs>False</show_tabs>
<show_border>False</show_border>
<tab_pos>GTK_POS_TOP</tab_pos>
<scrollable>False</scrollable>
<tab_hborder>2</tab_hborder>
<tab_vborder>2</tab_vborder>
<popup_enable>False</popup_enable>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkFrame</class>
<name>paper_frame</name>
<label>Paper Options</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<widget>
<class>GtkTable</class>
<name>paper_table</name>
<rows>2</rows>
<columns>4</columns>
<homogeneous>False</homogeneous>
<row_spacing>0</row_spacing>
<column_spacing>0</column_spacing>
<widget>
<class>GtkLabel</class>
<name>size_label</name>
<label>Size</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>True</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>orientation_label</name>
<label>Orientation</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>2</left_attach>
<right_attach>3</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>True</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>papersize</name>
<can_focus>True</can_focus>
<items>Letter
</items>
<initial_choice>0</initial_choice>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>True</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>orientation</name>
<can_focus>True</can_focus>
<items>Portrait
</items>
<initial_choice>0</initial_choice>
<child>
<left_attach>3</left_attach>
<right_attach>4</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>True</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>pagecount_label</name>
<label>Count</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>pagecount_menu</name>
<can_focus>True</can_focus>
<items>Single (scaled)
</items>
<initial_choice>0</initial_choice>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>True</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<child_name>Notebook:tab</child_name>
<name>paper_tab</name>
<label>Paper</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
</widget>
<widget>
<class>GtkFrame</class>
<name>html_frame</name>
<label>HTML Options</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<widget>
<class>GtkTable</class>
<name>table3</name>
<rows>2</rows>
<columns>4</columns>
<homogeneous>False</homogeneous>
<row_spacing>0</row_spacing>
<column_spacing>0</column_spacing>
<widget>
<class>GtkLabel</class>
<name>label7</name>
<label>Template</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GnomeFileEntry</class>
<name>htmltemplate</name>
<history_id>HtmlTemplate</history_id>
<max_saved>10</max_saved>
<directory>False</directory>
<modal>False</modal>
<child>
<left_attach>1</left_attach>
<right_attach>4</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GnomeEntry:entry</child_name>
<name>htmlfile</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<child_name>Notebook:tab</child_name>
<name>html_tab</name>
<label>HTML</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>options_frame</name>
<border_width>4</border_width>
<label>Report Options</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkTable</class>
<name>options_table</name>
<rows>5</rows>
<columns>2</columns>
<homogeneous>False</homogeneous>
<row_spacing>0</row_spacing>
<column_spacing>0</column_spacing>
<widget>
<class>GtkCombo</class>
<name>filter_combo</name>
<border_width>5</border_width>
<value_in_list>True</value_in_list>
<ok_if_empty>True</ok_if_empty>
<case_sensitive>False</case_sensitive>
<use_arrows>True</use_arrows>
<use_arrows_always>False</use_arrows_always>
<items></items>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GtkCombo:entry</child_name>
<name>filter</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<name>filter_label</name>
<label>Filter</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>gen_label</name>
<label>Generations</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkSpinButton</class>
<name>generations</name>
<can_focus>True</can_focus>
<climb_rate>1</climb_rate>
<digits>0</digits>
<numeric>True</numeric>
<update_policy>GTK_UPDATE_ALWAYS</update_policy>
<snap>False</snap>
<wrap>False</wrap>
<value>0</value>
<lower>1</lower>
<upper>28</upper>
<step>1</step>
<page>10</page>
<page_size>10</page_size>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkCheckButton</class>
<name>pagebreak</name>
<can_focus>True</can_focus>
<label>Page break between generations</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>2</top_attach>
<bottom_attach>3</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>extra_menu_label</name>
<label></label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>3</top_attach>
<bottom_attach>4</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>extra_textbox_label</name>
<label></label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0</yalign>
<xpad>5</xpad>
<ypad>5</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>4</top_attach>
<bottom_attach>5</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>True</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>extra_menu</name>
<border_width>5</border_width>
<can_focus>True</can_focus>
<items>default
</items>
<initial_choice>0</initial_choice>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>3</top_attach>
<bottom_attach>4</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkScrolledWindow</class>
<name>extra_scrolledwindow</name>
<border_width>5</border_width>
<height>80</height>
<hscrollbar_policy>GTK_POLICY_ALWAYS</hscrollbar_policy>
<vscrollbar_policy>GTK_POLICY_ALWAYS</vscrollbar_policy>
<hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
<vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>4</top_attach>
<bottom_attach>5</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>True</yfill>
</child>
<widget>
<class>GtkText</class>
<name>extra_textbox</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text></text>
</widget>
</widget>
</widget>
</widget>
</widget>
</widget>
</widget>
<widget>
<class>GtkWindow</class>
<name>progress_dialog</name>
<title>Gramps - Generate HTML reports</title>
<type>GTK_WINDOW_TOPLEVEL</type>
<position>GTK_WIN_POS_NONE</position>
<modal>False</modal>
<allow_shrink>False</allow_shrink>
<allow_grow>True</allow_grow>
<auto_shrink>False</auto_shrink>
<widget>
<class>GtkVBox</class>
<name>vbox2</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkLabel</class>
<name>header_label</name>
<label>default</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>5</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkHSeparator</class>
<name>hseparator2</name>
<child>
<padding>5</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkHBox</class>
<name>hbox1</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>10</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>Placeholder</class>
</widget>
<widget>
<class>GtkProgressBar</class>
<name>progressbar</name>
<width>300</width>
<value>0</value>
<lower>0</lower>
<upper>100</upper>
<bar_style>GTK_PROGRESS_CONTINUOUS</bar_style>
<orientation>GTK_PROGRESS_LEFT_TO_RIGHT</orientation>
<activity_mode>False</activity_mode>
<show_text>True</show_text>
<format>%v of %u (%P%%)</format>
<text_xalign>0.5</text_xalign>
<text_yalign>0.5</text_yalign>
<child>
<padding>5</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>Placeholder</class>
</widget>
</widget>
</widget>
</widget>
</GTK-Interface>

View File

@ -1,501 +0,0 @@
<?xml version="1.0"?>
<GTK-Interface>
<project>
<name>desreport</name>
<program_name>desreport</program_name>
<directory></directory>
<source_directory>src</source_directory>
<pixmaps_directory>pixmaps</pixmaps_directory>
<language>C</language>
<gnome_support>True</gnome_support>
<gettext_support>True</gettext_support>
</project>
<widget>
<class>GnomeDialog</class>
<name>dialog1</name>
<title>Gramps - Descendant Report</title>
<type>GTK_WINDOW_DIALOG</type>
<position>GTK_WIN_POS_NONE</position>
<modal>False</modal>
<allow_shrink>False</allow_shrink>
<allow_grow>False</allow_grow>
<auto_shrink>False</auto_shrink>
<auto_close>False</auto_close>
<hide_on_close>False</hide_on_close>
<widget>
<class>GtkVBox</class>
<child_name>GnomeDialog:vbox</child_name>
<name>dialog-vbox2</name>
<homogeneous>False</homogeneous>
<spacing>8</spacing>
<child>
<padding>4</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHButtonBox</class>
<child_name>GnomeDialog:action_area</child_name>
<name>dialog-action_area2</name>
<layout_style>GTK_BUTTONBOX_END</layout_style>
<spacing>8</spacing>
<child_min_width>85</child_min_width>
<child_min_height>27</child_min_height>
<child_ipad_x>7</child_ipad_x>
<child_ipad_y>0</child_ipad_y>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
<pack>GTK_PACK_END</pack>
</child>
<widget>
<class>GtkButton</class>
<name>button14</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_save_clicked</handler>
<object>dialog1</object>
<last_modification_time>Thu, 15 Mar 2001 23:13:39 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
</widget>
<widget>
<class>GtkButton</class>
<name>button16</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>destroy_passed_object</handler>
<object>dialog1</object>
<last_modification_time>Thu, 15 Mar 2001 23:13:20 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
</widget>
</widget>
<widget>
<class>GtkVBox</class>
<name>vbox3</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>labelTitle</name>
<label>Descendant Report</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkHSeparator</class>
<name>hseparator1</name>
<child>
<padding>5</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkHBox</class>
<name>hbox2</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>5</padding>
<expand>False</expand>
<fill>False</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label12</name>
<label>Save As</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GnomeFileEntry</class>
<name>fileentry1</name>
<width>350</width>
<history_id>descendant_report</history_id>
<max_saved>10</max_saved>
<title>Save Descendant Report</title>
<directory>False</directory>
<modal>False</modal>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GnomeEntry:entry</child_name>
<name>filename</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>frame1</name>
<border_width>5</border_width>
<label>Format</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkVBox</class>
<name>vbox6</name>
<border_width>5</border_width>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkOptionMenu</class>
<name>format</name>
<can_focus>True</can_focus>
<items>
</items>
<initial_choice>0</initial_choice>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>style_frame</name>
<border_width>5</border_width>
<label>Styles</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHBox</class>
<name>hbox3</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkOptionMenu</class>
<name>style_menu</name>
<border_width>10</border_width>
<can_focus>True</can_focus>
<items>default
</items>
<initial_choice>0</initial_choice>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkButton</class>
<name>button17</name>
<border_width>10</border_width>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_style_edit_clicked</handler>
<object>dialog1</object>
<last_modification_time>Tue, 05 Jun 2001 14:39:29 GMT</last_modification_time>
</signal>
<label>Style Editor</label>
<relief>GTK_RELIEF_NORMAL</relief>
<child>
<padding>5</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>frame2</name>
<border_width>5</border_width>
<label>Options</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkNotebook</class>
<name>option_notebook</name>
<show_tabs>False</show_tabs>
<show_border>False</show_border>
<tab_pos>GTK_POS_TOP</tab_pos>
<scrollable>False</scrollable>
<tab_hborder>2</tab_hborder>
<tab_vborder>2</tab_vborder>
<popup_enable>False</popup_enable>
<widget>
<class>GtkTable</class>
<name>table1</name>
<rows>2</rows>
<columns>2</columns>
<homogeneous>False</homogeneous>
<row_spacing>0</row_spacing>
<column_spacing>0</column_spacing>
<widget>
<class>GtkLabel</class>
<name>label13</name>
<label>Paper</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>label14</name>
<label>Orientation</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>papersize</name>
<can_focus>True</can_focus>
<items>
</items>
<initial_choice>0</initial_choice>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>orientation</name>
<can_focus>True</can_focus>
<items>
</items>
<initial_choice>0</initial_choice>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<child_name>Notebook:tab</child_name>
<name>label13</name>
<label>Paper</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
</widget>
<widget>
<class>GtkVBox</class>
<name>vbox5</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkHBox</class>
<name>hbox1</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>10</padding>
<expand>False</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label11</name>
<label>Template</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GnomeFileEntry</class>
<name>htmltemplate</name>
<history_id>HtmlTemplate</history_id>
<max_saved>10</max_saved>
<title>Choose the HTML template</title>
<directory>False</directory>
<modal>False</modal>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GnomeEntry:entry</child_name>
<name>htmlfile</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
</widget>
<widget>
<class>Placeholder</class>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<child_name>Notebook:tab</child_name>
<name>label14</name>
<label>Template</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
</widget>
</widget>
</widget>
</widget>
</widget>
</widget>
</GTK-Interface>

View File

@ -1,526 +0,0 @@
<?xml version="1.0"?>
<GTK-Interface>
<project>
<name>familygroup</name>
<program_name>familygroup</program_name>
<directory></directory>
<source_directory>src</source_directory>
<pixmaps_directory>pixmaps</pixmaps_directory>
<language>C</language>
<gnome_support>True</gnome_support>
<gettext_support>True</gettext_support>
</project>
<widget>
<class>GnomeDialog</class>
<name>dialog1</name>
<title>Gramps - Family Group Report</title>
<type>GTK_WINDOW_DIALOG</type>
<position>GTK_WIN_POS_NONE</position>
<modal>False</modal>
<allow_shrink>False</allow_shrink>
<allow_grow>False</allow_grow>
<auto_shrink>False</auto_shrink>
<auto_close>False</auto_close>
<hide_on_close>False</hide_on_close>
<widget>
<class>GtkVBox</class>
<child_name>GnomeDialog:vbox</child_name>
<name>dialog-vbox2</name>
<homogeneous>False</homogeneous>
<spacing>8</spacing>
<child>
<padding>4</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHButtonBox</class>
<child_name>GnomeDialog:action_area</child_name>
<name>dialog-action_area2</name>
<layout_style>GTK_BUTTONBOX_END</layout_style>
<spacing>8</spacing>
<child_min_width>85</child_min_width>
<child_min_height>27</child_min_height>
<child_ipad_x>7</child_ipad_x>
<child_ipad_y>0</child_ipad_y>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
<pack>GTK_PACK_END</pack>
</child>
<widget>
<class>GtkButton</class>
<name>button14</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_save_clicked</handler>
<object>dialog1</object>
<last_modification_time>Thu, 15 Mar 2001 23:13:39 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
</widget>
<widget>
<class>GtkButton</class>
<name>button16</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>destroy_passed_object</handler>
<object>dialog1</object>
<last_modification_time>Thu, 15 Mar 2001 23:13:20 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
</widget>
</widget>
<widget>
<class>GtkVBox</class>
<name>vbox3</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>labelTitle</name>
<label>Family Group Report</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkHSeparator</class>
<name>hseparator1</name>
<child>
<padding>5</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkHBox</class>
<name>hbox2</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>5</padding>
<expand>False</expand>
<fill>False</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label12</name>
<label>Save As</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GnomeFileEntry</class>
<name>fileentry1</name>
<width>350</width>
<history_id>family_group</history_id>
<max_saved>10</max_saved>
<title>Save Family Group Report</title>
<directory>False</directory>
<modal>False</modal>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GnomeEntry:entry</child_name>
<name>filename</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>spouse</name>
<border_width>5</border_width>
<visible>False</visible>
<label>Choose Spouse</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>5</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkOptionMenu</class>
<name>spouse_menu</name>
<border_width>10</border_width>
<can_focus>True</can_focus>
<items>
</items>
<initial_choice>0</initial_choice>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>frame1</name>
<border_width>5</border_width>
<label>Format</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkVBox</class>
<name>vbox4</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkOptionMenu</class>
<name>format</name>
<border_width>10</border_width>
<can_focus>True</can_focus>
<items>
</items>
<initial_choice>0</initial_choice>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>style_frame</name>
<border_width>5</border_width>
<label>Styles</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHBox</class>
<name>hbox3</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkOptionMenu</class>
<name>style_menu</name>
<border_width>10</border_width>
<can_focus>True</can_focus>
<items>default
</items>
<initial_choice>0</initial_choice>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkButton</class>
<name>button17</name>
<border_width>10</border_width>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_style_edit_clicked</handler>
<object>dialog1</object>
<last_modification_time>Tue, 05 Jun 2001 14:39:29 GMT</last_modification_time>
</signal>
<label>Style Editor</label>
<relief>GTK_RELIEF_NORMAL</relief>
<child>
<padding>5</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>frame2</name>
<border_width>5</border_width>
<label>Options</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkNotebook</class>
<name>option_notebook</name>
<show_tabs>False</show_tabs>
<show_border>False</show_border>
<tab_pos>GTK_POS_TOP</tab_pos>
<scrollable>False</scrollable>
<tab_hborder>2</tab_hborder>
<tab_vborder>2</tab_vborder>
<popup_enable>False</popup_enable>
<widget>
<class>GtkTable</class>
<name>table1</name>
<rows>2</rows>
<columns>2</columns>
<homogeneous>False</homogeneous>
<row_spacing>0</row_spacing>
<column_spacing>0</column_spacing>
<widget>
<class>GtkLabel</class>
<name>label14</name>
<label>Orientation</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>label13</name>
<label>Paper</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>orientation</name>
<can_focus>True</can_focus>
<items>
</items>
<initial_choice>0</initial_choice>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>papersize</name>
<can_focus>True</can_focus>
<items>
</items>
<initial_choice>0</initial_choice>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<child_name>Notebook:tab</child_name>
<name>label14</name>
<label>Paper</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
</widget>
<widget>
<class>GtkVBox</class>
<name>vbox5</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkHBox</class>
<name>hbox1</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>5</padding>
<expand>False</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label11</name>
<label>Template</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GnomeFileEntry</class>
<name>htmltemplate</name>
<history_id>HtmlTemplate</history_id>
<max_saved>10</max_saved>
<title>Choose the HTML template</title>
<directory>False</directory>
<modal>False</modal>
<child>
<padding>5</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GnomeEntry:entry</child_name>
<name>htmlfile</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
</widget>
<widget>
<class>Placeholder</class>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<child_name>Notebook:tab</child_name>
<name>label15</name>
<label>Template</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
</widget>
</widget>
</widget>
</widget>
</widget>
</widget>
</GTK-Interface>

View File

@ -1,488 +0,0 @@
<?xml version="1.0"?>
<GTK-Interface>
<project>
<name>HtmlReport</name>
<program_name>htmlreport</program_name>
<directory></directory>
<source_directory>src</source_directory>
<pixmaps_directory>pixmaps</pixmaps_directory>
<language>C</language>
<gnome_support>True</gnome_support>
<gettext_support>True</gettext_support>
</project>
<widget>
<class>GtkWindow</class>
<name>top</name>
<title>Generate Relationship Graphs</title>
<type>GTK_WINDOW_TOPLEVEL</type>
<position>GTK_WIN_POS_CENTER</position>
<modal>False</modal>
<allow_shrink>False</allow_shrink>
<allow_grow>True</allow_grow>
<auto_shrink>False</auto_shrink>
<widget>
<class>GtkVBox</class>
<name>vbox1</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkTable</class>
<name>table1</name>
<rows>3</rows>
<columns>2</columns>
<homogeneous>False</homogeneous>
<row_spacing>0</row_spacing>
<column_spacing>0</column_spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label3</name>
<label>Output File</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>False</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GnomeFileEntry</class>
<name>targetDirectory</name>
<history_id>relationgraph</history_id>
<max_saved>10</max_saved>
<title>GraphViz File</title>
<directory>False</directory>
<modal>False</modal>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>10</xpad>
<ypad>10</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GnomeEntry:entry</child_name>
<name>filename</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
<widget>
<class>GtkCombo</class>
<name>filterName</name>
<value_in_list>False</value_in_list>
<ok_if_empty>True</ok_if_empty>
<case_sensitive>False</case_sensitive>
<use_arrows>True</use_arrows>
<use_arrows_always>False</use_arrows_always>
<items></items>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>2</top_attach>
<bottom_attach>3</bottom_attach>
<xpad>10</xpad>
<ypad>10</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GtkCombo:entry</child_name>
<name>filter</name>
<can_focus>True</can_focus>
<editable>False</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<name>personName</name>
<label>Person</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>2</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>5</xpad>
<ypad>10</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>label6</name>
<label>Filter</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>2</top_attach>
<bottom_attach>3</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
</widget>
<widget>
<class>GtkHBox</class>
<name>hbox4</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>5</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>Placeholder</class>
</widget>
<widget>
<class>GtkFrame</class>
<name>frame2</name>
<label>Format</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>10</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkRadioButton</class>
<name>graphviz</name>
<can_focus>True</can_focus>
<label>GraphViz (dot)</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<group>format</group>
</widget>
</widget>
<widget>
<class>Placeholder</class>
</widget>
</widget>
<widget>
<class>GtkHBox</class>
<name>hbox1</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>Placeholder</class>
</widget>
<widget>
<class>GtkFrame</class>
<name>frame1</name>
<label>Paper Size Selection</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>10</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkVBox</class>
<name>vbox2</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GnomePaperSelector</class>
<name>paper</name>
<border_width>10</border_width>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkHBox</class>
<name>hbox3</name>
<homogeneous>True</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label8</name>
<label>Pages</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkRadioButton</class>
<name>scaled</name>
<can_focus>True</can_focus>
<label>Single (scaled)</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<group>s</group>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkRadioButton</class>
<name>fit</name>
<can_focus>True</can_focus>
<label>Single</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<group>s</group>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkRadioButton</class>
<name>multi</name>
<can_focus>True</can_focus>
<label>Multiple</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<group>s</group>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
</widget>
<widget>
<class>GtkHBox</class>
<name>hbox2</name>
<homogeneous>True</homogeneous>
<spacing>0</spacing>
<child>
<padding>5</padding>
<expand>False</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label7</name>
<label>Paper Orientation</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkRadioButton</class>
<name>portrait</name>
<can_focus>True</can_focus>
<label>Portrait</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<group>o</group>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkRadioButton</class>
<name>radiobutton1</name>
<can_focus>True</can_focus>
<label>Landscape</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<group>o</group>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>label9</name>
<label></label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
</widget>
</widget>
</widget>
<widget>
<class>Placeholder</class>
</widget>
</widget>
<widget>
<class>GtkHButtonBox</class>
<name>hbuttonbox1</name>
<layout_style>GTK_BUTTONBOX_END</layout_style>
<spacing>30</spacing>
<child_min_width>85</child_min_width>
<child_min_height>27</child_min_height>
<child_ipad_x>7</child_ipad_x>
<child_ipad_y>0</child_ipad_y>
<child>
<padding>10</padding>
<expand>False</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkButton</class>
<name>ok</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_ok_clicked</handler>
<object>top</object>
<last_modification_time>Sun, 12 Nov 2000 00:45:16 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
<relief>GTK_RELIEF_NORMAL</relief>
</widget>
<widget>
<class>GtkButton</class>
<name>button2</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>destroy_passed_object</handler>
<object>top</object>
<last_modification_time>Sun, 12 Nov 2000 00:45:38 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
<relief>GTK_RELIEF_NORMAL</relief>
</widget>
</widget>
</widget>
</widget>
</GTK-Interface>

View File

@ -1,501 +0,0 @@
<?xml version="1.0"?>
<GTK-Interface>
<project>
<name>indsum</name>
<program_name>indsum</program_name>
<directory></directory>
<source_directory>src</source_directory>
<pixmaps_directory></pixmaps_directory>
<language>C</language>
<gnome_support>True</gnome_support>
<gettext_support>True</gettext_support>
</project>
<widget>
<class>GnomeDialog</class>
<name>dialog1</name>
<title>Gramps - Individual Summary</title>
<type>GTK_WINDOW_DIALOG</type>
<position>GTK_WIN_POS_NONE</position>
<modal>False</modal>
<allow_shrink>False</allow_shrink>
<allow_grow>False</allow_grow>
<auto_shrink>False</auto_shrink>
<auto_close>False</auto_close>
<hide_on_close>False</hide_on_close>
<widget>
<class>GtkVBox</class>
<child_name>GnomeDialog:vbox</child_name>
<name>dialog-vbox2</name>
<homogeneous>False</homogeneous>
<spacing>8</spacing>
<child>
<padding>4</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHButtonBox</class>
<child_name>GnomeDialog:action_area</child_name>
<name>dialog-action_area2</name>
<layout_style>GTK_BUTTONBOX_END</layout_style>
<spacing>8</spacing>
<child_min_width>85</child_min_width>
<child_min_height>27</child_min_height>
<child_ipad_x>7</child_ipad_x>
<child_ipad_y>0</child_ipad_y>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
<pack>GTK_PACK_END</pack>
</child>
<widget>
<class>GtkButton</class>
<name>button14</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_save_clicked</handler>
<object>dialog1</object>
<last_modification_time>Thu, 15 Mar 2001 23:13:39 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
</widget>
<widget>
<class>GtkButton</class>
<name>button16</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>destroy_passed_object</handler>
<object>dialog1</object>
<last_modification_time>Thu, 15 Mar 2001 23:13:20 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
</widget>
</widget>
<widget>
<class>GtkVBox</class>
<name>vbox3</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>labelTitle</name>
<label>Individual Summary</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkHSeparator</class>
<name>hseparator1</name>
<child>
<padding>5</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkHBox</class>
<name>hbox2</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>5</padding>
<expand>False</expand>
<fill>False</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label12</name>
<label>Save As</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GnomeFileEntry</class>
<name>fileentry1</name>
<width>350</width>
<history_id>family_group</history_id>
<max_saved>10</max_saved>
<title>Save Individual Summary</title>
<directory>False</directory>
<modal>False</modal>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GnomeEntry:entry</child_name>
<name>filename</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>frame1</name>
<border_width>5</border_width>
<label>Format</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkVBox</class>
<name>vbox6</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkOptionMenu</class>
<name>format</name>
<border_width>5</border_width>
<can_focus>True</can_focus>
<items>
</items>
<initial_choice>0</initial_choice>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>style_frame</name>
<border_width>5</border_width>
<label>Styles</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHBox</class>
<name>hbox3</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkOptionMenu</class>
<name>style_menu</name>
<border_width>10</border_width>
<can_focus>True</can_focus>
<items>default
</items>
<initial_choice>0</initial_choice>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkButton</class>
<name>button17</name>
<border_width>10</border_width>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_style_edit_clicked</handler>
<object>dialog1</object>
<last_modification_time>Tue, 05 Jun 2001 14:39:29 GMT</last_modification_time>
</signal>
<label>Style Editor</label>
<relief>GTK_RELIEF_NORMAL</relief>
<child>
<padding>5</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>frame2</name>
<border_width>5</border_width>
<label>Options</label>
<label_xalign>0</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkNotebook</class>
<name>option_notebook</name>
<show_tabs>False</show_tabs>
<show_border>False</show_border>
<tab_pos>GTK_POS_TOP</tab_pos>
<scrollable>False</scrollable>
<tab_hborder>2</tab_hborder>
<tab_vborder>2</tab_vborder>
<popup_enable>False</popup_enable>
<widget>
<class>GtkTable</class>
<name>table1</name>
<rows>2</rows>
<columns>2</columns>
<homogeneous>False</homogeneous>
<row_spacing>0</row_spacing>
<column_spacing>0</column_spacing>
<widget>
<class>GtkLabel</class>
<name>label13</name>
<label>Paper</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>label14</name>
<label>Orientation</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>orientation</name>
<can_focus>True</can_focus>
<items>
</items>
<initial_choice>0</initial_choice>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkOptionMenu</class>
<name>papersize</name>
<can_focus>True</can_focus>
<items>
</items>
<initial_choice>0</initial_choice>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>5</xpad>
<ypad>5</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<child_name>Notebook:tab</child_name>
<name>label13</name>
<label>Paper</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
</widget>
<widget>
<class>GtkVBox</class>
<name>vbox5</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkHBox</class>
<name>hbox1</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>5</padding>
<expand>False</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label11</name>
<label>Template</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GnomeFileEntry</class>
<name>htmltemplate</name>
<history_id>HtmlTemplate</history_id>
<max_saved>10</max_saved>
<title>Choose the HTML template</title>
<directory>False</directory>
<modal>False</modal>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GnomeEntry:entry</child_name>
<name>htmlfile</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
</widget>
<widget>
<class>Placeholder</class>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<child_name>Notebook:tab</child_name>
<name>label14</name>
<label>Template</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
</widget>
</widget>
</widget>
</widget>
</widget>
</widget>
</GTK-Interface>

File diff suppressed because it is too large Load Diff

View File

@ -531,3 +531,31 @@ def combo_timer_callback(combo):
entry.set_position(len(typed))
entry.select_region(len(typed), -1)
return
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def build_string_optmenu(mapping, start_val):
index = 0
start_index = 0
keys = mapping.keys()
keys.sort()
myMenu = gtk.GtkMenu()
for key in keys:
if key == "default":
menuitem = gtk.GtkMenuItem(_("default"))
else:
menuitem = gtk.GtkMenuItem(key)
menuitem.set_data("d", mapping[key])
menuitem.show()
myMenu.append(menuitem)
if key == start_val:
start_index = index
index = index + 1
if start_index:
myMenu.set_active(start_index)
return myMenu