Changes

Jump to: navigation, search

Quick Views

2,302 bytes added, 10 March
m
See also
[[File:QuickViewReport-EditPerson-context-menu-popup-50.png|thumb|right|450px|Quick reports are reports that are available in the View context menu's of person, family, ... on Person Editor]]
They Quick Views (previously called ''Quick reports'' but show up in "Available Gramps Update for Addons" as ''Quickreport'') are easy to make by usersreports that are available in the context menu's of person, family, even et cetera. There are a set of [[Gramps_{{man version}}_Wiki_Manual_-_Reports_-_part_8#Quick_Views|built-in Quick Views]] that can be expanded with add-on QuickView type plug-ins. People with limited coding knowledgeshould be able to make them.
==Introduction==
[[Image:Gramps_quick_report_edit.png|thumb|right|Quick Report context menu on Person Editor]]Many users want to produce a report quickly for their specific needs, but are hindered by the fact they do not want to learn python fully, nor the intricacies of a complicated program like GRAMPSGramps. For them, starting with Gramps 3.0 a tool was constructed: the {{man label|Quick Views}} short textual reports that the user can register with Gramps, so they automatically appear in the context menu's.
For them, starting in GRAMPS 3.0 a new tool has been constructed: the quick reports. These reports are short textual reports that the user can register with GRAMPS, so they automatically appear in the context menu's.
Accompanying this, a [[Simple Access API|simple database access]] and simple document interface has been constructed, so as to hide as much complexity as possible.
{{-}} ==Where to store my quick reportQuick View==A quick report Quick View is one single file. You can store it normally composed of two files in its own subdirectory, that are stored under your ''[[Gramps_{{man version}}_Wiki_Manual_-_User_Directory|User]]'' plugins directory. Go into your home folder and go to the hidden directory subdirectory '''.gramps'''. In this directory you will find the '''plugins''' directorysubdirectory. Just add your plugin there, and it will appear within GRAMPSGramps.
For the terminal users, you can get there as follows:
cd ~/.gramps/grampsxx/plugins
 
* See [[Gramps_{{man version}}_Wiki_Manual_-_User_Directory|Wiki Manual Appendix D - User Directory]]
==Example 1==
===Code===
[[File:Gramps_quick_report_viewQuickViewReport-people-context-menu-popup-50.png|thumb|right|450px|Quick Report View context menu on Person View]][[File:Siblings-quick-report-result-34.png|thumb|right|450px|Quick View Report example result output]]
How better than to learn something than using an example?
{{-}}
Create <span id="siblings.gpr.py"></span>==== siblings2.gpr.py ====You first need a Gramps registration (<code>*.gpr.py</code>) file so create a python file named <code>Siblings.gpr.py</code> and add the following content:<pre>#------------------------------------------------------------------------# File: siblings.gpr.py#------------------------------------------------------------------------ register(QUICKREPORT, id = 'siblings2', name = _("Siblings2 - Example Quick View"), description = _("Display a person's siblings."), version = '0.1', gramps_target_version = '5.2', status = STABLE, fname = 'siblings2.py', authors = ["Your Name Here"], authors_email = ["Your @ Email address here"], category = CATEGORY_QR_PERSON, runfunc = 'run' )</pre> <span id="siblings.py"></span>==== siblings2.py ====Now create a python file named <code>siblings.py </code> and add the following content:
<pre>
# File: Siblings.py
#------------------------------------------------------------------------
# GPL licensed, written by DonFile: siblings2.##py
#------------------------------------------------------------------------
from Simple import SimpleAccess, SimpleDoc
from gettext import gettext as _
from PluginUtils import register_quick_report
from ReportBase import CATEGORY_QR_PERSON
# define the formatting string once as a constantfrom gramps.gen. Since this is reusedsimple import SimpleAccess, SimpleDocfrom gramps.gui.plug.quick import QuickTable__FMT from gramps.gen.const import GRAMPS_LOCALE as glocale_ = "%-30s\t%-10s\t%s"glocale.translation.gettext
def run(database, document, person):
sdoc.title(_("Siblings of %s") % sdb.name(person))
sdoc.paragraph("")
 
# display the header of a table
sdoc.header1(__FMT % (_("Sibling"), _("Gender"), _("Birth Date")))
# grab our current id, so we can filter the active person out
gid = sdb.gid(person)
 
 
stab = QuickTable(sdb)
sdoc.header1(_("Siblings"))
stab.columns(_("Person"),
_("Gender"),
_("Date"))
# loop through each family in which the person is a child
# only display if this child is not the active person
if sdb.gid(child) != gid:
sdocstab.paragraph(__FMT % ( sdb.namerow(child),
sdb.gender(child),
sdb.birth_date(child))) #------------------------------------------------------------------------####------------------------------------------------------------------------register_quick_report( name document.has_data = 'a_unique_name_with_no_spaces',True category = CATEGORY_QR_PERSON, run_func = run, translated_name = _stab.write("Siblings"), status = _("Stable"), description= _("Display a person's siblings."), author_name="your name", author_email="your email" sdoc)
</pre>
===Analysis: registering the report===
The above code is GPL licensed, written by Don. Let's analyse thisthe [[Quick_Views#siblings2.gpr.py|siblings2.gpr.py]] file above. We start at the bottom where the report is registered with '''register_quick_reportregister'''. This is the function GRAMPS Gramps will look for in your file. You need to give:*{{man label|name}} = a unique name: a name GRAMPS Gramps identifies the plugin with, don't use spaces or strange symbols. In this case, we add a '2' to the name to avoid conflicts with the built-in [[Gramps_{{man version}}_Wiki_Manual_-_Reports_-_part_8#Siblings|siblings quickview]].*[https://github.com/gramps-project/gramps/blob/892fc270592095192947097d22a72834d5c70447/gramps/gen/plug/_pluginreg.py#L159-L171 {{man label|category}} ] = a special constant indicating where the report will be shown. You can use '''CATEGORY_QR_PERSON''' to see the report on person editor and view, or '''CATEGORY_QR_FAMILY''' to see the report on family editor or view.(CATEGORY_QR_DATE is for reports that can be embedded in other reports since there is no "Date" category.)*{{man label|run_func}} = the function you create in this plugin and that GRAMPS Gramps will execute when the user selects your quick report in the menu
* {{man label|translated_name}} = the name of the report as it will appear in the menu
* [https://github.com/gramps-project/gramps/blob/892fc270592095192947097d22a72834d5c70447/gramps/gen/plug/_pluginreg.py#L58-L69 {{man label|status}} ] = is your report '''Stable''' or , '''Unstable'''. Not used at the moment. On distributing GRAMPS we only include stable reports., '''Experimental''' and '''Beta'''*{{man label|description}} = a description of what your plugin does. This appears in a tooltip over the menu*{{man label|author_name}} = your name*{{man label|author_email}}= your email, so people can congratulate you with your work, or ask for bug fixes... And beginning with Gramps 5.2 version, there are [https://github.com/gramps-project/gramps/pull/1451 additional registration properties]: * {{man label|help_url}} = a webpage that will be opened when using the Help* [https://github.com/gramps-project/gramps/blob/892fc270592095192947097d22a72834d5c70447/gramps/gen/plug/_pluginreg.py#L71-L76 {{man label|audience}}] = filtering options: ‘All’, ‘Developer’ and ‘Expert’.* {{man label|maintainers}} = name of person currently maintaining the add-on, if different from the author_name* {{man label|maintainers_email}} = email of person currently maintaining the add-on, if different from the author_email* [https://github.com/gramps-project/gramps/blob/892fc270592095192947097d22a72834d5c70447/gramps/gen/plug/_pluginreg.py#L297-L299 {{man label|requires_mod}}], [https://github.com/gramps-project/gramps/blob/892fc270592095192947097d22a72834d5c70447/gramps/gen/plug/_pluginreg.py#L300-L303 {{man label|requires_gi}}], [https://github.com/gramps-project/gramps/blob/892fc270592095192947097d22a72834d5c70447/gramps/gen/plug/_pluginreg.py#L304-L306 {{man label|requires_exe}}] = if the addon has prerequisites.
===Analysis: the run function===
If the user clicks in the quick report menu on your report, the run function is executed with three parameters:
<center>'''run_function(database, document, handle)'''</center>Now lets analyse the [[Quick_Views#siblings.py|siblings.py]] file.
So, your report received from gramps If the database on which to work, user clicks in the document quick view report menu on which to writeyour report, and the handle (=unique identifier) of run function is executed with the object the user is on. For a person quick report, this is a person handle, for family, a family handle.following three parameters:
<code>run(database, document, person)</code>
 
So, your report receives from Gramps the currently opened database name on which to work, the document on which to write, and the person of the object the user is on. For a person quick view report, this is a person, for family, a family.
In this example, the function called is
<code>def run(database, document, person):</code>
===Analysis: accessing the data===
Now that your plugin runs, you need to open the database, start the document, access data, and write it out. We do this using the [[Simple Access API|Simple Database API]].  So, the following code: <pre> 41 # setup the simple access functions 42 sdb = SimpleAccess(database) 43 sdoc = SimpleDoc(document)</pre> 
prepares everything. Then we write a title on the document, an empty line under it, and a header, with the title, paragraph and header function:
45 # display the title
46 sdoc.title(_("Siblings of %s") % sdb.name(person))
47 sdoc.paragraph("")
49 # display the header of a table
50 sdoc.header1(__FMT % (_("Sibling"), _("Gender"), _("Birth Date")))
Note that we use '''_''' for every string for translation, which comes from the line
27 from gettext import gettext as _
You can replace this by
46 sdoc.title("Siblings of %s" % sdb.name(person))
to just try it out for yourself, without a translation option.
As we will write a list, it is usefull to define <pre># display the structure titlesdoc.title(_("Siblings of your text one time, and reuse this%s") % sdb. That is the '''__FMT''' constant, defined asname(person)) 33 __FMT = sdoc.paragraph("%-30s\t%-10s\t%s")So </pre> Note that we have 30 spaces for the Sibling field, then a tab use an underscore ('''\t'''<code>_</code>)to indicate every string that requires translation, then 10 spaces for which comes from the Gender, another tab and the last stringfield for the birth dateline: <pre>from gramps.gen.ggettext import gettext as _</pre>
Everything is set up, now we write out the lines with all the siblings, leaving out the active person himself, as he is in the title field!
52 <pre># grab our current id, so we can filter the active person out 53 # of the data 54 55 gid = sdb.gid(person) 56 57 # loop through each family in which the person is a child 58 for family in sdb.child_in(person): 59 60 # loop through each child in the family 61 for child in sdb.children(family): 62 63 # only display if this child is not the active person 64 if sdb.gid(child) != gid: 65 sdoc.paragraph(__FMT % ( 66 sdb stab.namerow(child), 67 sdb.gender(child), 68 sdb.birth_date(child)) document.has_data = Truestab.write(sdoc)</pre>
Here, the easy access classes from the [[Simple Access API]] have been used to quickly achieve what we want.
==Example 2==
 A second example can be found in the GRAMPS Gramps code. See [httphttps://svngithub.code.sf.netcom/pgramps-project/gramps/codeblob/trunkmaster/gramps/plugins/quickview/all_events.py all_events.py]. In this report, all events for a person are printed, and all events for a family. Two quick reports are hence registered, one for person, and one for family.
==Notes==
The possibilities are enormous. If you are an experienced hackerprogrammer, there is no need to limit yourself to the simple database API. Also, if you make a real report, you can at the same time register a quick report with default settings. See: [https://github.com/gramps-project/gramps/tree/master/gramps/plugins/quickview https://github.com/gramps-project/gramps/tree/master/gramps/plugins/quickview] =See also=* [[Gramps_{{man version}}_Wiki_Manual_-_Reports_-_part_8#Quick_Views]]
[[Category:Developers/General]]

Navigation menu