def add_menu_options(self, menu): """ Add the options for this report """ category_name = _("Report Options") title = StringOption(_('book|Title'), _('Title of the Book')) title.set_help(_("Title string for the book.")) menu.add_option(category_name, "title", title) subtitle = StringOption(_('Subtitle'), _('Subtitle of the Book')) subtitle.set_help(_("Subtitle string for the book.")) menu.add_option(category_name, "subtitle", subtitle) dateinfo = time.localtime(time.time()) rname = self.__db.get_researcher().get_name() footer_string = _('Copyright %(year)d %(name)s') % { 'year': dateinfo[0], 'name': rname } footer = StringOption(_('Footer'), footer_string) footer.set_help(_("Footer string for the page.")) menu.add_option(category_name, "footer", footer) imgid = MediaOption(_('Image')) imgid.set_help(_("Gramps ID of the media object to use as an image.")) menu.add_option(category_name, "imgid", imgid) imgsize = NumberOption(_('Image Size'), 0, 0, 20, 0.1) imgsize.set_help( _("Size of the image in cm. A value of 0 indicates " "that the image should be fit to the page.")) menu.add_option(category_name, "imgsize", imgsize)
def add_menu_options(self, menu): """ Add options to the menu for the fan chart. """ category_name = _("Report Options") pid = PersonOption(_("Center Person")) pid.set_help(_("The center person for the report")) menu.add_option(category_name, "pid", pid) max_gen = NumberOption(_("Generations"),5,1,self.MAX_GENERATIONS) max_gen.set_help(_("The number of generations to include in the report")) menu.add_option(category_name,"maxgen",max_gen) circle = EnumeratedListOption(_('Type of graph'),HALF_CIRCLE) circle.add_item(FULL_CIRCLE,_('full circle')) circle.add_item(HALF_CIRCLE,_('half circle')) circle.add_item(QUAR_CIRCLE,_('quarter circle')) circle.set_help( _("The form of the graph: full circle, half circle," " or quarter circle.")) menu.add_option(category_name,"circle",circle) background = EnumeratedListOption(_('Background color'),BACKGROUND_GEN) background.add_item(BACKGROUND_WHITE,_('white')) background.add_item(BACKGROUND_GEN,_('generation dependent')) background.set_help(_("Background color is either white or generation" " dependent")) menu.add_option(category_name,"background",background) radial = EnumeratedListOption( _('Orientation of radial texts'), RADIAL_UPRIGHT ) radial.add_item(RADIAL_UPRIGHT,_('upright')) radial.add_item(RADIAL_ROUNDABOUT,_('roundabout')) radial.set_help(_("Print radial texts upright or roundabout")) menu.add_option(category_name,"radial",radial)
def add_menu_options(self, menu): category_name = _("Report Options") pid = PersonOption(_("Center Person")) pid.set_help(_("The center person for the report")) menu.add_option(category_name, "pid", pid) # We must figure out the value of the first option before we can # create the EnumeratedListOption fmt_list = global_name_display.get_name_format() name_format = EnumeratedListOption(_("Name format"), 0) name_format.add_item(0, _("Default")) for num, name, fmt_str, act in fmt_list: name_format.add_item(num, name) name_format.set_help(_("Select the format to display names")) menu.add_option(category_name, "name_format", name_format) numbering = EnumeratedListOption(_("Numbering system"), "Simple") numbering.set_items([ ("Simple", _("Simple numbering")), ("de Villiers/Pama", _("de Villiers/Pama numbering")), ("Meurgey de Tupigny", _("Meurgey de Tupigny numbering")) ]) numbering.set_help(_("The numbering system to be used")) menu.add_option(category_name, "numbering", numbering) gen = NumberOption(_("Generations"), 10, 1, 15) gen.set_help(_("The number of generations to include in the report")) menu.add_option(category_name, "gen", gen) marrs = BooleanOption(_('Show marriage info'), False) marrs.set_help( _("Whether to show marriage information in the report.")) menu.add_option(category_name, "marrs", marrs) divs = BooleanOption(_('Show divorce info'), False) divs.set_help(_("Whether to show divorce information in the report.")) menu.add_option(category_name, "divs", divs) dups = BooleanOption(_('Show duplicate trees'), True) dups.set_help( _("Whether to show duplicate family trees in the report.")) menu.add_option(category_name, "dups", dups)
def add_menu_options(self, menu): """ Add options to the menu for the ancestor report. """ category_name = _("Report Options") pid = PersonOption(_("Center Person")) pid.set_help(_("The center person for the report")) menu.add_option(category_name, "pid", pid) # We must figure out the value of the first option before we can # create the EnumeratedListOption fmt_list = global_name_display.get_name_format() name_format = EnumeratedListOption(_("Name format"), 0) name_format.add_item(0, _("Default")) for num, name, fmt_str, act in fmt_list: name_format.add_item(num, name) name_format.set_help(_("Select the format to display names")) menu.add_option(category_name, "name_format", name_format) maxgen = NumberOption(_("Generations"), 10, 1, 100) maxgen.set_help( _("The number of generations to include in the report")) menu.add_option(category_name, "maxgen", maxgen) pagebbg = BooleanOption(_("Page break between generations"), False) pagebbg.set_help( _("Whether to start a new page after each generation.")) menu.add_option(category_name, "pagebbg", pagebbg) namebrk = BooleanOption(_("Add linebreak after each name"), False) namebrk.set_help( _("Indicates if a line break should follow the name.")) menu.add_option(category_name, "namebrk", namebrk) trans = EnumeratedListOption(_("Translation"), Translator.DEFAULT_TRANSLATION_STR) trans.add_item(Translator.DEFAULT_TRANSLATION_STR, _("Default")) for language in TransUtils.get_available_translations(): trans.add_item(language, get_language_string(language)) trans.set_help(_("The translation to be used for the report.")) menu.add_option(category_name, "trans", trans)
def add_menu_options(self, menu): """ Create all the menu options for this report. """ category_name = _("Options") pid = PersonOption(_("Center Person")) pid.set_help(_("The Center person for the graph")) menu.add_option(category_name, "pid", pid) max_gen = NumberOption(_('Max Descendant Generations'), 10, 1, 15) max_gen.set_help( _("The number of generations of descendants to " "include in the graph")) menu.add_option(category_name, "maxdescend", max_gen) max_gen = NumberOption(_('Max Ancestor Generations'), 10, 1, 15) max_gen.set_help( _("The number of generations of ancestors to " "include in the graph")) menu.add_option(category_name, "maxascend", max_gen) ################################ category_name = _("Graph Style") ################################ color = EnumeratedListOption(_("Graph coloring"), "filled") for i in range(0, len(_COLORS)): color.add_item(_COLORS[i]["value"], _COLORS[i]["name"]) color.set_help( _("Males will be shown with blue, females " "with red. If the sex of an individual " "is unknown it will be shown with gray.")) menu.add_option(category_name, "color", color) roundedcorners = BooleanOption( # see bug report #2180 _("Use rounded corners"), False) roundedcorners.set_help( _("Use rounded corners to differentiate " "between women and men.")) menu.add_option(category_name, "roundcorners", roundedcorners)
def add_menu_options(self, menu): """ Add options to the menu for the ancestor report. """ category_name = _("Report Options") pid = PersonOption(_("Center Person")) pid.set_help(_("The center person for the report")) menu.add_option(category_name, "pid", pid) maxgen = NumberOption(_("Generations"), 10, 1, 300) maxgen.set_help(_("The number of generations to include in the report")) menu.add_option(category_name, "maxgen", maxgen) Filleddigit = NumberOption(_("Filleddigit"), 10, 1, 50) Filleddigit.set_help(_("The number of digit after comma to include in the report for the percentage of ancestor found at a given generation")) menu.add_option(category_name, "Filleddigit", Filleddigit) Collapsedigit = NumberOption(_("Collapsedigit"), 10, 1, 50) Collapsedigit.set_help(_("The number of digit after comma to include in the report for the pedigree Collapse")) menu.add_option(category_name, "Collapsedigit", Collapsedigit) displayth = BooleanOption(_("Display theorical"), False) displayth.set_help(_("Display the theorical number of ancestor by generation")) menu.add_option(category_name, "Display theorical", displayth) trans = EnumeratedListOption(_("Translation"),"default") trans.add_item("default", _("English")) for language in get_available_translations(): trans.add_item(language, get_language_string(language)) trans.set_help(_("The translation to be used for the report.")) menu.add_option(category_name, "trans", trans)
def add_menu_options(self, menu): """ Add options to the menu for the kinship report. """ category_name = _("Report Options") pid = PersonOption(_("Center Person")) pid.set_help(_("The center person for the report")) menu.add_option(category_name, "pid", pid) # We must figure out the value of the first option before we can # create the EnumeratedListOption fmt_list = global_name_display.get_name_format() name_format = EnumeratedListOption(_("Name format"), 0) name_format.add_item(0, _("Default")) for num, name, fmt_str, act in fmt_list: name_format.add_item(num, name) name_format.set_help(_("Select the format to display names")) menu.add_option(category_name, "name_format", name_format) maxdescend = NumberOption(_("Max Descendant Generations"), 2, 1, 20) maxdescend.set_help(_("The maximum number of descendant generations")) menu.add_option(category_name, "maxdescend", maxdescend) maxascend = NumberOption(_("Max Ancestor Generations"), 2, 1, 20) maxascend.set_help(_("The maximum number of ancestor generations")) menu.add_option(category_name, "maxascend", maxascend) incspouses = BooleanOption(_("Include spouses"), True) incspouses.set_help(_("Whether to include spouses")) menu.add_option(category_name, "incspouses", incspouses) inccousins = BooleanOption(_("Include cousins"), True) inccousins.set_help(_("Whether to include cousins")) menu.add_option(category_name, "inccousins", inccousins) incaunts = BooleanOption(_("Include aunts/uncles/nephews/nieces"), True) incaunts.set_help(_("Whether to include aunts/uncles/nephews/nieces")) menu.add_option(category_name, "incaunts", incaunts)
def add_menu_options(self, menu): """ Add the options for the graphical calendar """ add_option = partial(menu.add_option, _("Report Options")) year = NumberOption(_("Year of calendar"), time.localtime()[0], 1000, 3000) year.set_help(_("Year of calendar")) add_option("year", year) self.__filter = FilterOption(_("Filter"), 0) self.__filter.set_help( _("Select filter to restrict people that appear on calendar")) add_option("filter", self.__filter) self.__pid = PersonOption(_("Center Person")) self.__pid.set_help(_("The center person for the report")) add_option("pid", self.__pid) self.__pid.connect('value-changed', self.__update_filters) self.__update_filters() # We must figure out the value of the first option before we can # create the EnumeratedListOption fmt_list = _nd.get_name_format() name_format = EnumeratedListOption(_("Name format"), fmt_list[0][0]) for num, name, fmt_str, act in fmt_list: name_format.add_item(num, name) name_format.set_help(_("Select the format to display names")) add_option("name_format", name_format) country = EnumeratedListOption(_("Country for holidays"), 0) holiday_table = libholiday.HolidayTable() countries = holiday_table.get_countries() countries.sort() if (len(countries) == 0 or (len(countries) > 0 and countries[0] != '')): countries.insert(0, '') count = 0 for c in countries: country.add_item(count, c) count += 1 country.set_help(_("Select the country to see associated holidays")) add_option("country", country) start_dow = EnumeratedListOption(_("First day of week"), 1) for count in range(1, 8): # conversion between gramps numbering (sun=1) and iso numbering (mon=1) of weekdays below start_dow.add_item((count + 5) % 7 + 1, GrampsLocale.long_days[count].capitalize()) start_dow.set_help( _("Select the first day of the week for the calendar")) add_option("start_dow", start_dow) maiden_name = EnumeratedListOption(_("Birthday surname"), "own") maiden_name.add_item( "spouse_first", _("Wives use husband's surname (from first family listed)")) maiden_name.add_item( "spouse_last", _("Wives use husband's surname (from last family listed)")) maiden_name.add_item("own", _("Wives use their own surname")) maiden_name.set_help(_("Select married women's displayed surname")) add_option("maiden_name", maiden_name) alive = BooleanOption(_("Include only living people"), True) alive.set_help(_("Include only living people in the calendar")) add_option("alive", alive) birthdays = BooleanOption(_("Include birthdays"), True) birthdays.set_help(_("Include birthdays in the calendar")) add_option("birthdays", birthdays) anniversaries = BooleanOption(_("Include anniversaries"), True) anniversaries.set_help(_("Include anniversaries in the calendar")) add_option("anniversaries", anniversaries) category_name = _("Text Options") add_option = partial(menu.add_option, _("Text Options")) text1 = StringOption(_("Text Area 1"), _("My Calendar")) text1.set_help(_("First line of text at bottom of calendar")) add_option("text1", text1) text2 = StringOption(_("Text Area 2"), _("Produced with Gramps")) text2.set_help(_("Second line of text at bottom of calendar")) add_option("text2", text2) text3 = StringOption( _("Text Area 3"), "http://gramps-project.org/", ) text3.set_help(_("Third line of text at bottom of calendar")) add_option("text3", text3)
class FamilyLinesOptions(MenuReportOptions): """ Defines all of the controls necessary to configure the FamilyLines reports. """ def __init__(self, name, dbase): self.limit_parents = None self.max_parents = None self.limit_children = None self.max_children = None self.include_images = None self.image_location = None MenuReportOptions.__init__(self, name, dbase) def add_menu_options(self, menu): # -------------------------------- add_option = partial(menu.add_option, _('People of Interest')) # -------------------------------- person_list = PersonListOption(_('People of interest')) person_list.set_help( _('People of interest are used as a starting ' 'point when determining "family lines".')) add_option('gidlist', person_list) followpar = BooleanOption( _('Follow parents to determine family lines'), True) followpar.set_help( _('Parents and their ancestors will be ' 'considered when determining "family lines".')) add_option('followpar', followpar) followchild = BooleanOption( _('Follow children to determine ' '"family lines"'), True) followchild.set_help( _('Children will be considered when ' 'determining "family lines".')) add_option('followchild', followchild) remove_extra_people = BooleanOption( _('Try to remove extra people and families'), True) remove_extra_people.set_help( _('People and families not directly ' 'related to people of interest will ' 'be removed when determining ' '"family lines".')) add_option('removeextra', remove_extra_people) # ---------------------------- add_option = partial(menu.add_option, _('Family Colours')) # ---------------------------- surname_color = SurnameColorOption(_('Family colours')) surname_color.set_help(_('Colours to use for various family lines.')) add_option('surnamecolors', surname_color) # ------------------------- add_option = partial(menu.add_option, _('Individuals')) # ------------------------- color_males = ColorOption(_('Males'), '#e0e0ff') color_males.set_help(_('The colour to use to display men.')) add_option('colormales', color_males) color_females = ColorOption(_('Females'), '#ffe0e0') color_females.set_help(_('The colour to use to display women.')) add_option('colorfemales', color_females) color_unknown = ColorOption(_('Unknown'), '#e0e0e0') color_unknown.set_help( _('The colour to use ' 'when the gender is unknown.')) add_option('colorunknown', color_unknown) color_family = ColorOption(_('Families'), '#ffffe0') color_family.set_help(_('The colour to use to display families.')) add_option('colorfamilies', color_family) self.limit_parents = BooleanOption(_('Limit the number of ancestors'), False) self.limit_parents.set_help( _('Whether to ' 'limit the number of ancestors.')) add_option('limitparents', self.limit_parents) self.limit_parents.connect('value-changed', self.limit_changed) self.max_parents = NumberOption('', 50, 10, 9999) self.max_parents.set_help( _('The maximum number ' 'of ancestors to include.')) add_option('maxparents', self.max_parents) self.limit_children = BooleanOption( _('Limit the number ' 'of descendants'), False) self.limit_children.set_help( _('Whether to ' 'limit the number of descendants.')) add_option('limitchildren', self.limit_children) self.limit_children.connect('value-changed', self.limit_changed) self.max_children = NumberOption('', 50, 10, 9999) self.max_children.set_help( _('The maximum number ' 'of descendants to include.')) add_option('maxchildren', self.max_children) # -------------------- add_option = partial(menu.add_option, _('Images')) # -------------------- self.include_images = BooleanOption( _('Include ' 'thumbnail images of people'), True) self.include_images.set_help( _('Whether to ' 'include thumbnail images of people.')) add_option('incimages', self.include_images) self.include_images.connect('value-changed', self.images_changed) self.image_location = EnumeratedListOption(_('Thumbnail location'), 0) self.image_location.add_item(0, _('Above the name')) self.image_location.add_item(1, _('Beside the name')) self.image_location.set_help( _('Where the thumbnail image ' 'should appear relative to the name')) add_option('imageonside', self.image_location) # --------------------- add_option = partial(menu.add_option, _('Options')) # --------------------- color = EnumeratedListOption(_("Graph coloring"), "filled") for i in range(len(_COLORS)): color.add_item(_COLORS[i]["value"], _COLORS[i]["name"]) color.set_help( _("Males will be shown with blue, females " "with red, unless otherwise set above for filled. " "If the sex of an individual " "is unknown it will be shown with gray.")) add_option("color", color) use_roundedcorners = BooleanOption(_('Use rounded corners'), False) use_roundedcorners.set_help( _('Use rounded corners to differentiate ' 'between women and men.')) add_option("useroundedcorners", use_roundedcorners) self.include_dates = BooleanOption(_('Include dates'), True) self.include_dates.set_help( _('Whether to include dates for people ' 'and families.')) add_option('incdates', self.include_dates) self.include_dates.connect('value-changed', self.include_dates_changed) self.justyears = BooleanOption(_("Limit dates to years only"), False) self.justyears.set_help( _("Prints just dates' year, neither " "month or day nor date approximation " "or interval are shown.")) add_option("justyears", self.justyears) include_places = BooleanOption(_('Include places'), True) include_places.set_help( _('Whether to include placenames for people ' 'and families.')) add_option('incplaces', include_places) include_num_children = BooleanOption( _('Include the number of children'), True) include_num_children.set_help( _('Whether to include the number of ' 'children for families with more ' 'than 1 child.')) add_option('incchildcnt', include_num_children) include_private = BooleanOption(_('Include private records'), False) include_private.set_help( _('Whether to include names, dates, and ' 'families that are marked as private.')) add_option('incprivate', include_private) self.limit_changed() self.images_changed() def limit_changed(self): """ Handle the change of limiting parents and children. """ self.max_parents.set_available(self.limit_parents.get_value()) self.max_children.set_available(self.limit_children.get_value()) def images_changed(self): """ Handle the change of including images. """ self.image_location.set_available(self.include_images.get_value()) def include_dates_changed(self): """ Enable/disable menu items if dates are required """ if self.include_dates.get_value(): self.justyears.set_available(True) else: self.justyears.set_available(False)
class AncestorTreeOptions(MenuReportOptions): """ Defines options and provides handling interface. """ def __init__(self, name, dbase): MenuReportOptions.__init__(self, name, dbase) def add_menu_options(self, menu): ################## category_name = _("Tree Options") pid = PersonOption(_("Center Person")) pid.set_help(_("The center person for the tree")) menu.add_option(category_name, "pid", pid) self.max_gen = NumberOption(_("Generations"), 10, 1, 50) self.max_gen.set_help( _("The number of generations to include " "in the tree")) menu.add_option(category_name, "maxgen", self.max_gen) self.fillout = EnumeratedListOption(_("Display unknown\ngenerations"), 0) self.fillout.set_help( _("The number of generations of empty " "boxes that will be displayed")) menu.add_option(category_name, "fill_out", self.fillout) self.max_gen.connect('value-changed', self.__fillout_vals) self.__fillout_vals() compress = BooleanOption(_('Co_mpress tree'), True) compress.set_help( _("Whether to remove any extra blank spaces set " "aside for people that are unknown")) menu.add_option(category_name, "compress_tree", compress) #better to 'Show siblings of\nthe center person #Spouse_disp = EnumeratedListOption(_("Show spouses of\nthe center " # "person"), 0) #Spouse_disp.add_item( 0, _("No. Do not show Spouses")) #Spouse_disp.add_item( 1, _("Yes, and use the the Main Display Format")) #Spouse_disp.add_item( 2, _("Yes, and use the the Secondary " # "Display Format")) #Spouse_disp.set_help(_("Show spouses of the center person?")) #menu.add_option(category_name, "Spouse_disp", Spouse_disp) centerDisp = EnumeratedListOption( _("Center person uses\n" "which format"), 0) centerDisp.add_item(0, _("Use Fathers Display format")) centerDisp.add_item(1, _("Use Mothers display format")) centerDisp.set_help(_("Which Display format to use the center person")) menu.add_option(category_name, "center_uses", centerDisp) ################## category_name = _("Display") disp = TextOption( _("Father\nDisplay Format"), ["$n", "%s $b" % _BORN, "{%s $d}" % _DIED]) disp.set_help(_("Display format for the fathers box.")) menu.add_option(category_name, "father_disp", disp) #Will add when libsubstkeyword supports it. #missing = EnumeratedListOption(_("Replace missing\nplaces\\dates \ # with"), 0) #missing.add_item( 0, _("Does not display anything")) #missing.add_item( 1, _("Displays '_____'")) #missing.set_help(_("What will print when information is not known")) #menu.add_option(category_name, "miss_val", missing) #category_name = _("Secondary") dispMom = TextOption( _("Mother\nDisplay Format"), ["$n", "%s $b" % _BORN, "%s $m" % _MARR, "{%s $d}" % _DIED]) dispMom.set_help(_("Display format for the mothers box.")) menu.add_option(category_name, "mother_disp", dispMom) incmarr = BooleanOption(_('Include Marriage box'), False) incmarr.set_help( _("Whether to include a separate marital box in the report")) menu.add_option(category_name, "inc_marr", incmarr) marrdisp = StringOption(_("Marriage\nDisplay Format"), "%s $m" % _MARR) marrdisp.set_help(_("Display format for the marital box.")) menu.add_option(category_name, "marr_disp", marrdisp) ################## category_name = _("Size") self.scale = EnumeratedListOption(_("Scale tree to fit"), 0) self.scale.add_item(0, _("Do not scale tree")) self.scale.add_item(1, _("Scale tree to fit page width only")) self.scale.add_item(2, _("Scale tree to fit the size of the page")) self.scale.set_help( _("Whether to scale the tree to fit a specific paper size")) menu.add_option(category_name, "scale_tree", self.scale) self.scale.connect('value-changed', self.__check_blank) if "BKI" not in self.name.split(","): self.__onepage = BooleanOption( _("Resize Page to Fit Tree size\n" "\n" "Note: Overrides options in the 'Paper Option' tab"), False) self.__onepage.set_help( _("Whether to resize the page to fit the size \n" "of the tree. Note: the page will have a \n" "non standard size.\n" "\n" "With this option selected, the following will happen:\n" "\n" "With the 'Do not scale tree' option the page\n" " is resized to the height/width of the tree\n" "\n" "With 'Scale tree to fit page width only' the height of\n" " the page is resized to the height of the tree\n" "\n" "With 'Scale tree to fit the size of the page' the page\n" " is resized to remove any gap in either height or width")) menu.add_option(category_name, "resize_page", self.__onepage) self.__onepage.connect('value-changed', self.__check_blank) else: self.__onepage = None ################## category_name = _("Include") self.title = EnumeratedListOption(_("Report Title"), 0) self.title.add_item(0, _("Do not include a title")) self.title.add_item(1, _("Include Report Title")) self.title.set_help(_("Choose a title for the report")) menu.add_option(category_name, "report_title", self.title) border = BooleanOption(_('Include a border'), False) border.set_help(_("Whether to make a border around the report.")) menu.add_option(category_name, "inc_border", border) prnnum = BooleanOption(_('Include Page Numbers'), False) prnnum.set_help(_("Whether to print page numbers on each page.")) menu.add_option(category_name, "inc_pagenum", prnnum) self.__blank = BooleanOption(_('Include Blank Pages'), True) self.__blank.set_help(_("Whether to include pages that are blank.")) menu.add_option(category_name, "inc_blank", self.__blank) self.__check_blank() #category_name = _("Notes") self.usenote = BooleanOption(_('Include a note'), False) self.usenote.set_help(_("Whether to include a note on " "the report.")) menu.add_option(category_name, "inc_note", self.usenote) self.notedisp = TextOption(_("Note"), []) self.notedisp.set_help(_("Add a note\n\n" "$T inserts today's date")) menu.add_option(category_name, "note_disp", self.notedisp) locales = NoteType(0, 1) self.notelocal = EnumeratedListOption(_("Note Location"), 0) for num, text in locales.note_locals(): self.notelocal.add_item(num, text) self.notelocal.set_help(_("Where to place the note.")) menu.add_option(category_name, "note_place", self.notelocal) def __check_blank(self): if self.__onepage: value = not self.__onepage.get_value() else: value = True off = value and (self.scale.get_value() != 2) self.__blank.set_available(off) def __fillout_vals(self): max_gen = self.max_gen.get_value() old_val = self.fillout.get_value() item_list = [] item_list.append( [0, _("No generations of empty boxes " "for unknown ancestors")]) if max_gen > 1: item_list.append([ 1, _("One Generation of empty boxes " "for unknown ancestors") ]) item_list.extend([ itr, str(itr) + _(" Generations of empty boxes for unknown ancestors") ] for itr in range(2, max_gen)) self.fillout.set_items(item_list) if old_val + 2 > len(item_list): self.fillout.set_value(len(item_list) - 2) def make_default_style(self, default_style): """Make the default output style for the Ancestor Tree.""" from gen.plug.docgen import (FontStyle, ParagraphStyle, GraphicsStyle, FONT_SANS_SERIF, PARA_ALIGN_CENTER) ## Paragraph Styles: font = FontStyle() font.set_size(9) font.set_type_face(FONT_SANS_SERIF) para_style = ParagraphStyle() para_style.set_font(font) para_style.set_description( _('The basic style used for the ' 'text display.')) default_style.add_paragraph_style("AC2-Normal", para_style) box_shadow = PT2CM(font.get_size()) * .6 font = FontStyle() font.set_size(16) font.set_type_face(FONT_SANS_SERIF) para_style = ParagraphStyle() para_style.set_font(font) para_style.set_alignment(PARA_ALIGN_CENTER) para_style.set_description( _('The basic style used for the ' 'title display.')) default_style.add_paragraph_style("AC2-Title", para_style) ## Draw styles graph_style = GraphicsStyle() graph_style.set_paragraph_style("AC2-Normal") graph_style.set_shadow(1, box_shadow) #shadow set by text size graph_style.set_fill_color((255, 255, 255)) default_style.add_draw_style("AC2-box", graph_style) graph_style = GraphicsStyle() graph_style.set_paragraph_style("AC2-Normal") #graph_style.set_shadow(0, PT2CM(9)) #shadow set by text size graph_style.set_fill_color((255, 255, 255)) default_style.add_draw_style("AC2-fam-box", graph_style) graph_style = GraphicsStyle() graph_style.set_paragraph_style("AC2-Title") graph_style.set_color((0, 0, 0)) graph_style.set_fill_color((255, 255, 255)) graph_style.set_line_width(0) default_style.add_draw_style("AC2-Title", graph_style) graph_style = GraphicsStyle() default_style.add_draw_style("AC2-line", graph_style)
def add_menu_options(self, menu): """ Add options to the menu for the statistics report. """ ################################ add_option = partial(menu.add_option, _("Report Options")) ################################ self.__filter = FilterOption(_("Filter"), 0) self.__filter.set_help( _("Determines what people are included in the report.")) add_option("filter", self.__filter) self.__filter.connect('value-changed', self.__filter_changed) self.__pid = PersonOption(_("Filter Person")) self.__pid.set_help(_("The center person for the filter.")) add_option("pid", self.__pid) self.__pid.connect('value-changed', self.__update_filters) self.__update_filters() sortby = EnumeratedListOption(_('Sort chart items by'), _options.SORT_VALUE) for item_idx in range(len(_options.sorts)): item = _options.sorts[item_idx] sortby.add_item(item_idx, item[2]) sortby.set_help(_("Select how the statistical data is sorted.")) add_option("sortby", sortby) reverse = BooleanOption(_("Sort in reverse order"), False) reverse.set_help(_("Check to reverse the sorting order.")) add_option("reverse", reverse) this_year = time.localtime()[0] year_from = NumberOption(_("People Born After"), 1700, 1, this_year) year_from.set_help(_("Birth year from which to include people.")) add_option("year_from", year_from) year_to = NumberOption(_("People Born Before"), this_year, 1, this_year) year_to.set_help(_("Birth year until which to include people")) add_option("year_to", year_to) no_years = BooleanOption(_("Include people without known birth years"), False) no_years.set_help( _("Whether to include people without " "known birth years.")) add_option("no_years", no_years) gender = EnumeratedListOption(_('Genders included'), Person.UNKNOWN) for item_idx in range(len(_options.genders)): item = _options.genders[item_idx] gender.add_item(item[0], item[2]) gender.set_help( _("Select which genders are included into " "statistics.")) add_option("gender", gender) bar_items = NumberOption(_("Max. items for a pie"), 8, 0, 20) bar_items.set_help( _("With fewer items pie chart and legend will be " "used instead of a bar chart.")) add_option("bar_items", bar_items) # ------------------------------------------------- # List of available charts on separate option tabs idx = 0 half = (len(_Extract.extractors)) / 2 self.charts = {} for key in _Extract.extractors: if idx < half: category_name = _("Charts 1") else: category_name = _("Charts 2") opt = BooleanOption(_Extract.extractors[key][1], False) opt.set_help(_("Include charts with indicated data.")) menu.add_option(category_name, key, opt) idx += 1 # Enable a couple of charts by default menu.get_option_by_name("data_gender").set_value(True) menu.get_option_by_name("data_ccount").set_value(True) menu.get_option_by_name("data_bmonth").set_value(True)
def add_menu_options(self, menu): """ Add all graph related options to the menu. @param menu: The menu the options should be added to. @type menu: gen.plug.menu.Menu() @return: nothing """ ################################ category = _("GraphViz Layout") ################################ font_family = EnumeratedListOption(_("Font family"), "") for item in _FONTS: font_family.add_item(item["value"], item["name"]) font_family.set_help(_("Choose the font family. If international " "characters don't show, use FreeSans font. " "FreeSans is available from: " "http://www.nongnu.org/freefont/")) menu.add_option(category, "font_family", font_family) font_size = NumberOption(_("Font size"), 14, 8, 128) font_size.set_help(_("The font size, in points.")) menu.add_option(category, "font_size", font_size) rank_dir = EnumeratedListOption(_("Graph Direction"), "TB") for item in _RANKDIR: rank_dir.add_item(item["value"], item["name"]) rank_dir.set_help(_("Whether graph goes from top to bottom " "or left to right.")) menu.add_option(category, "rank_dir", rank_dir) h_pages = NumberOption(_("Number of Horizontal Pages"), 1, 1, 25) h_pages.set_help(_("GraphViz can create very large graphs by " "spreading the graph across a rectangular " "array of pages. This controls the number " "pages in the array horizontally. " "Only valid for dot and pdf via Ghostscript.")) menu.add_option(category, "h_pages", h_pages) v_pages = NumberOption(_("Number of Vertical Pages"), 1, 1, 25) v_pages.set_help(_("GraphViz can create very large graphs by " "spreading the graph across a rectangular " "array of pages. This controls the number " "pages in the array vertically. " "Only valid for dot and pdf via Ghostscript.")) menu.add_option(category, "v_pages", v_pages) page_dir = EnumeratedListOption(_("Paging Direction"), "BL") for item in _PAGEDIR: page_dir.add_item(item["value"], item["name"]) page_dir.set_help(_("The order in which the graph pages are output. " "This option only applies if the horizontal pages " "or vertical pages are greater than 1.")) menu.add_option(category, "page_dir", page_dir) # the page direction option only makes sense when the # number of horizontal and/or vertical pages is > 1, # so we need to remember these 3 controls for later self.h_pages = h_pages self.v_pages = v_pages self.page_dir = page_dir # the page direction option only makes sense when the # number of horizontal and/or vertical pages is > 1 self.h_pages.connect('value-changed', self.pages_changed) self.v_pages.connect('value-changed', self.pages_changed) ################################ category = _("GraphViz Options") ################################ aspect_ratio = EnumeratedListOption(_("Aspect ratio"), "fill") for item in _RATIO: aspect_ratio.add_item(item["value"], item["name"]) help_text = _('Affects node spacing and scaling of the graph.\n' 'If the graph is smaller than the print area:\n' ' Compress will not change the node spacing. \n' ' Fill will increase the node spacing to fit the print area in ' 'both width and height.\n' ' Expand will increase the node spacing uniformly to preserve ' 'the aspect ratio.\n' 'If the graph is larger than the print area:\n' ' Compress will shrink the graph to achieve tight packing at the ' 'expense of symmetry.\n' ' Fill will shrink the graph to fit the print area after first ' 'increasing the node spacing.\n' ' Expand will shrink the graph uniformly to fit the print area.') aspect_ratio.set_help(help_text) menu.add_option(category, "ratio", aspect_ratio) dpi = NumberOption(_("DPI"), 75, 20, 1200) dpi.set_help(_( "Dots per inch. When creating images such as " ".gif or .png files for the web, try numbers " "such as 100 or 300 DPI. PostScript and PDF files " "always use 72 DPI.")) menu.add_option(category, "dpi", dpi) self.dpi = dpi nodesep = NumberOption(_("Node spacing"), 0.20, 0.01, 5.00, 0.01) nodesep.set_help(_( "The minimum amount of free space, in inches, " "between individual nodes. For vertical graphs, " "this corresponds to spacing between columns. " "For horizontal graphs, this corresponds to " "spacing between rows.")) menu.add_option(category, "nodesep", nodesep) ranksep = NumberOption(_("Rank spacing"), 0.20, 0.01, 5.00, 0.01) ranksep.set_help(_( "The minimum amount of free space, in inches, " "between ranks. For vertical graphs, this " "corresponds to spacing between rows. For " "horizontal graphs, this corresponds to spacing " "between columns.")) menu.add_option(category, "ranksep", ranksep) use_subgraphs = BooleanOption(_('Use subgraphs'), True) use_subgraphs.set_help(_("Subgraphs can help GraphViz position " "spouses together, but with non-trivial " "graphs will result in longer lines and " "larger graphs.")) menu.add_option(category, "usesubgraphs", use_subgraphs) ################################ category = _("Note") ################################ note = TextOption(_("Note to add to the graph"), [""] ) note.set_help(_("This text will be added to the graph.")) menu.add_option(category, "note", note) noteloc = EnumeratedListOption(_("Note location"), 't') for i in range( 0, len(_NOTELOC) ): noteloc.add_item(_NOTELOC[i]["value"], _NOTELOC[i]["name"]) noteloc.set_help(_("Whether note will appear on top " "or bottom of the page.")) menu.add_option(category, "noteloc", noteloc) notesize = NumberOption(_("Note size"), 32, 8, 128) notesize.set_help(_("The size of note text, in points.")) menu.add_option(category, "notesize", notesize)
def add_menu_options(self, menu): """ Add options to the menu for the detailed descendant report. """ # Report Options add_option = partial(menu.add_option, _("Report Options")) pid = PersonOption(_("Center Person")) pid.set_help(_("The center person for the report")) add_option("pid", pid) # We must figure out the value of the first option before we can # create the EnumeratedListOption fmt_list = global_name_display.get_name_format() name_format = EnumeratedListOption(_("Name format"), 0) name_format.add_item(0, _("Default")) for num, name, fmt_str, act in fmt_list: name_format.add_item(num, name) name_format.set_help(_("Select the format to display names")) add_option("name_format", name_format) numbering = EnumeratedListOption(_("Numbering system"), "Henry") numbering.set_items([("Henry", _("Henry numbering")), ("d'Aboville", _("d'Aboville numbering")), ("Record (Modified Register)", _("Record (Modified Register) numbering"))]) numbering.set_help(_("The numbering system to be used")) add_option("numbering", numbering) generations = NumberOption(_("Generations"), 10, 1, 100) generations.set_help( _("The number of generations to include in the report")) add_option("gen", generations) pagebbg = BooleanOption(_("Page break between generations"), False) pagebbg.set_help( _("Whether to start a new page after each generation.")) add_option("pagebbg", pagebbg) pageben = BooleanOption(_("Page break before end notes"), False) pageben.set_help( _("Whether to start a new page before the end notes.")) add_option("pageben", pageben) trans = EnumeratedListOption(_("Translation"), Translator.DEFAULT_TRANSLATION_STR) trans.add_item(Translator.DEFAULT_TRANSLATION_STR, _("Default")) for language in TransUtils.get_available_translations(): trans.add_item(language, get_language_string(language)) trans.set_help(_("The translation to be used for the report.")) add_option("trans", trans) # Content add_option = partial(menu.add_option, _("Content")) usecall = BooleanOption(_("Use callname for common name"), False) usecall.set_help(_("Whether to use the call name as the first name.")) add_option("usecall", usecall) fulldates = BooleanOption(_("Use full dates instead of only the year"), True) fulldates.set_help( _("Whether to use full dates instead of just year.")) add_option("fulldates", fulldates) listc = BooleanOption(_("List children"), True) listc.set_help(_("Whether to list children.")) add_option("listc", listc) computeage = BooleanOption(_("Compute death age"), True) computeage.set_help(_("Whether to compute a person's age at death.")) add_option("computeage", computeage) omitda = BooleanOption(_("Omit duplicate ancestors"), True) omitda.set_help(_("Whether to omit duplicate ancestors.")) add_option("omitda", omitda) verbose = BooleanOption(_("Use complete sentences"), True) verbose.set_help( _("Whether to use complete sentences or succinct language.")) add_option("verbose", verbose) desref = BooleanOption(_("Add descendant reference in child list"), True) desref.set_help( _("Whether to add descendant references in child list.")) add_option("desref", desref) category_name = _("Include") add_option = partial(menu.add_option, _("Include")) incnotes = BooleanOption(_("Include notes"), True) incnotes.set_help(_("Whether to include notes.")) add_option("incnotes", incnotes) incattrs = BooleanOption(_("Include attributes"), False) incattrs.set_help(_("Whether to include attributes.")) add_option("incattrs", incattrs) incphotos = BooleanOption(_("Include Photo/Images from Gallery"), False) incphotos.set_help(_("Whether to include images.")) add_option("incphotos", incphotos) incnames = BooleanOption(_("Include alternative names"), False) incnames.set_help(_("Whether to include other names.")) add_option("incnames", incnames) incevents = BooleanOption(_("Include events"), False) incevents.set_help(_("Whether to include events.")) add_option("incevents", incevents) incaddresses = BooleanOption(_("Include addresses"), False) incaddresses.set_help(_("Whether to include addresses.")) add_option("incaddresses", incaddresses) incsources = BooleanOption(_("Include sources"), False) incsources.set_help(_("Whether to include source references.")) add_option("incsources", incsources) incsrcnotes = BooleanOption(_("Include sources notes"), False) incsrcnotes.set_help( _("Whether to include source notes in the " "Endnotes section. Only works if Include sources is selected.")) add_option("incsrcnotes", incsrcnotes) incmates = BooleanOption(_("Include spouses"), False) incmates.set_help(_("Whether to include detailed spouse information.")) add_option("incmates", incmates) incmateref = BooleanOption(_("Include spouse reference"), False) incmateref.set_help(_("Whether to include reference to spouse.")) add_option("incmateref", incmateref) incssign = BooleanOption( _("Include sign of succession ('+')" " in child-list"), True) incssign.set_help( _("Whether to include a sign ('+') before the" " descendant number in the child-list to indicate" " a child has succession.")) add_option("incssign", incssign) incpaths = BooleanOption(_("Include path to start-person"), False) incpaths.set_help( _("Whether to include the path of descendancy " "from the start-person to each descendant.")) add_option("incpaths", incpaths) # Missing information add_option = partial(menu.add_option, _("Missing information")) repplace = BooleanOption(_("Replace missing places with ______"), False) repplace.set_help(_("Whether to replace missing Places with blanks.")) add_option("repplace", repplace) repdate = BooleanOption(_("Replace missing dates with ______"), False) repdate.set_help(_("Whether to replace missing Dates with blanks.")) add_option("repdate", repdate)