# Built-in Calendar Gramplet

**URL:** <https://gramps.discourse.group/t/built-in-calendar-gramplet/2080>\
**Category:** Development\
**Created:** [December 26, 2021, 7:24pm UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080 "2021-12-26T19:24:16Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![emyoulation](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/emyoulation/32/67_2.png) [@emyoulation](https://gramps.discourse.group/u/emyoulation)\
**Post date:** [December 26, 2021, 7:24pm UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/1 "2021-12-26T19:24:16Z")

</div>

Can our Calendar Gramplet have Day of the Week column headers without sacrificing the selector controls?

The [Calendar Gramplet](https://github.com/gramps-project/gramps/blob/master/gramps/plugins/gramplet/calendargramplet.py#L52) is missing day of the week labels. But if the [display option](https://valadoc.org/gtk+-3.0/Gtk.CalendarDisplayOptions.html) for `SHOW_HEADING`

```python
        self.gui.calendar.set_display_options(
			Gtk.CalendarDisplayOptions.SHOW_HEADING)

```

 ![image](https://global.discourse-cdn.com/free1/uploads/gramps/original/2X/3/3322ac49cac8c9819b05f04e1bb6e36de1504383.png)

Is changed to:

```python
        self.gui.calendar.set_display_options(
			Gtk.CalendarDisplayOptions.SHOW_DAY_NAMES)

```

 ![image](https://global.discourse-cdn.com/free1/uploads/gramps/original/2X/e/ea640d97e20fd46d348e96f220b3106135b6f9de.png)

Then you lose the `Month` & `Year` controls. It doesn’t seem to like the options combined with commas or applied sequentially in separate statements.

Combine options with bar delimiter:

```python
    self.gui.calendar.set_display_options(
        Gtk.CalendarDisplayOptions.SHOW_DAY_NAMES |
        Gtk.CalendarDisplayOptions.SHOW_WEEK_NUMBERS |
        Gtk.CalendarDisplayOptions.SHOW_HEADING)

```

It also seems strange that the [GTK widget library](https://www.tutorialspoint.com/pygtk/pygtk_calendar_class.htm) doesn’t seem to have a European calendar – where the weeks start on Mondays. [Automatically adjusts to the locality]

I was initially looking at this Gramplet hoping to add « (`U+00AB`) and » (`U+00BB`) to move by decades instead of years. But that appears to not be an option either.

Based on other applications (that don’t support spans, ranges or date quality), I had anticipated a simple calendar selector when clicking the “Daily Calendar” gadget beside the Date field. Instead, the more complex “Date Selection” dialog appears.

 ![image](https://global.discourse-cdn.com/free1/uploads/gramps/original/2X/1/126e2bd68cea43d1e4902ccaee8d0deb28a4f7c1.png)

 ![image](https://global.discourse-cdn.com/free1/uploads/gramps/original/2X/8/87a39f7c6f80699265f3d1ada8b79fdebbb309e2.png)

---

<div class="post-metadata">

**Author:** ![SNoiraud](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/snoiraud/32/72_2.png) [@SNoiraud](https://gramps.discourse.group/u/SNoiraud)\
**Post date:** [December 27, 2021, 7:53am UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/2 "2021-12-27T07:53:52Z")

</div>

> [@emyoulation](#):
>
> Can our Calendar Gramplet have Day of the Week column headers without sacrificing the selector controls?

You can do that with:

```
    self.gui.calendar.set_display_options(
        Gtk.CalendarDisplayOptions.SHOW_DAY_NAMES |
        Gtk.CalendarDisplayOptions.SHOW_HEADING)

```

---

<div class="post-metadata">

**Author:** ![SNoiraud](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/snoiraud/32/72_2.png) [@SNoiraud](https://gramps.discourse.group/u/SNoiraud)\
**Post date:** [December 27, 2021, 8:46am UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/3 "2021-12-27T08:46:12Z")

</div>

> [@emyoulation](#):
>
> I was initially looking at this Gramplet hoping to add « ( `U+00AB` ) and » ( `U+00BB` ) to move by decades instead of years. But that appears to not be an option either.

The calendar gramplet is based on Gtk.Calendar widget.  
You can’t add methods, preferences, …

---

<div class="post-metadata">

**Author:** ![emyoulation](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/emyoulation/32/67_2.png) [@emyoulation](https://gramps.discourse.group/u/emyoulation)\
**Post date:** [December 27, 2021, 9:42am UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/4 "2021-12-27T09:42:41Z")

</div>

Thanks! ([Filed feature request 12515](https://gramps-project.org/bugs/view.php?id=12515)/[Pull 1319](https://github.com/gramps-project/gramps/pull/1319))

> [@SNoiraud](#):
>
> The calendar gramplet is based on Gtk.Calendar widget.  
> You can’t add methods, preferences, …

That’s unfortunate.

Perhaps it might be possible to have date field in the Gramplet that is synched to the widget? So that you could jump the calendar directly to a date years in the past?

This would be a useful reference for when hand parsing source record (such as an obit) that refers to day of the week [in relative terms](https://gramps-project.org/wiki/index.php?title=Genealogy_Glossary&mobileaction=toggle_view_mobile#Instante) to its current date. As in “died Tuesday” in an obituary dated 7 Aug 2021.

I noted that the tooltip on line 48 is inaccurate too. [Filed [bug report 12514](https://gramps-project.org/bugs/view.php?id=12514)]

```python
 ​ ​self​.​set_tooltip​(​_​(​"Double-click a day for details"​))

```

Double-click actually opens the “On This Day” Quick View. Although the more important tip might be that the day is draggable.

---

<div class="post-metadata">

**Author:** ![dsblank](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/dsblank/32/3649_2.png) [@dsblank](https://gramps.discourse.group/u/dsblank)\
**Post date:** [August 6, 2025, 4:43pm UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/7 "2025-08-06T16:43:04Z")

</div>

> [@SNoiraud](#):
>
> The calendar gramplet is based on Gtk.Calendar widget.  
> You can’t add methods, preferences, …

You can’t, unless you do a little bit more work. I like this very much:

 ![image](https://global.discourse-cdn.com/free1/uploads/gramps/original/2X/d/d1e33e363ee82a868b2f471505970b1b67b64597.png)

- Three arrows - decade controls
- Two arrows - year controls
- One arrow - month controls

If this looks good to you all, I’ll make a PR for Gramps 6.1.

---

<div class="post-metadata">

**Author:** ![SNoiraud](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/snoiraud/32/72_2.png) [@SNoiraud](https://gramps.discourse.group/u/SNoiraud)\
**Post date:** [August 6, 2025, 5:07pm UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/8 "2025-08-06T17:07:47Z")

</div>

You can without problems.

---

<div class="post-metadata">

**Author:** ![csam](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/csam/32/5361_2.png) [@csam](https://gramps.discourse.group/u/csam)\
**Post date:** [April 11, 2026, 12:34pm UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/9 "2026-04-11T12:34:23Z")

</div>

Could the Calendar gramplet be extended to be able to convert ‘church’ dates to ordinary calendar dates?  
With ‘church’ dates I mean the date naming like ‘Dominica Quasimodogeniti’. These dates changes from year to year.  
I typically use a web site to look up the date for e.g. Dominica Quasimodogeniti in 1783, but it would be handy to have the functionality in Gramps. Maybe the is would be another gramplet?

---

<div class="post-metadata">

**Author:** ![dsblank](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/dsblank/32/3649_2.png) [@dsblank](https://gramps.discourse.group/u/dsblank)\
**Post date:** [April 11, 2026, 2:14pm UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/10 "2026-04-11T14:14:17Z")

</div>

> [@csam](#):
>
> I typically use a web site to look up the date for e.g. Dominica Quasimodogeniti in 1783, but it would be handy to have the functionality in Gramps. Maybe the is would be another gramplet?

We can easily create a function that works like: `get_date_from_liturgical("Dominica Quasimodogeniti", 1783)`. But where could we put that in the UI? I don’t think the calendar widget is the right place, and I’m working to try to simplify Gramps overall complexity.

Perhaps we could create _the_ `DateGramplet` (to rule them all) that packages up all of the great date functions that we have (date math, conversions, liturgical lookups, etc.).

---

<div class="post-metadata">

**Author:** ![dsblank](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/dsblank/32/3649_2.png) [@dsblank](https://gramps.discourse.group/u/dsblank)\
**Post date:** [April 11, 2026, 2:16pm UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/11 "2026-04-11T14:16:19Z")

</div>

(As an aside, with the Gramps Assistant and the proposed function, you could simply ask it “When was Dominica Quasimodogeniti in 1783?”… no UI needed.)

---

<div class="post-metadata">

**Author:** ![dsblank](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/dsblank/32/3649_2.png) [@dsblank](https://gramps.discourse.group/u/dsblank)\
**Post date:** [April 11, 2026, 2:23pm UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/12 "2026-04-11T14:23:32Z")

</div>

(Even better: "Who in my family tree was born around the Dominica Quasimodogeniti in 1783?”)

---

<div class="post-metadata">

**Author:** ![emyoulation](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/emyoulation/32/67_2.png) [@emyoulation](https://gramps.discourse.group/u/emyoulation)\
**Post date:** [April 11, 2026, 4:10pm UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/13 "2026-04-11T16:10:18Z")

</div>

> [@dsblank](#):
>
> But where could we put that in the UI?

There is a [Custom holiday set](https://www.gramps-project.org/wiki/index.php?title=Calendar_tools_holidays) feature in Gramps. However, I have never understood the practical application of the `holidays.xml`.

It would be nice to display as ‘Dominica Quasimodogeniti, 1783’ but calculate using the Unix Epoch value. (This is even more complicated because **1783** was observed according to the **Gregorian calendar** in most of Europe, but on the **Julian calendar** in Britain and its American colonies.) Showing the original value as entered in the records would reduce the potential for double-conversions of those dates.

This question piques my interest as I have a similar Calendar problem: the Pennsylvania Quaker colony refused to use Pagan month names and weekday names. They would have used “27 Eighth Month 1730” or “27 8mo. 1730” or “27 viii 1730 o.s.” for “27 Oct 1730 (Julian)”.

In my family, there are a lot of “[Quaker Dates](https://www.swarthmore.edu/friends-historical-library/quaker-calendar)” (both Old Style and New Style, although Pennsylvania Quakers were sometimes ragged in adopting Gregorian calendar from the Julian). And if I record the Old Style Quaker date as converted to the more familiar pagan New Style, there is a good chance of double conversions. But if the date is stored with the Quaker Date as a Text string, it cannot be used for date calculations/statistics.

> “Dominica Quasimodogeniti” is a **church-calendar name** for a Sunday, not a fixed civil date. It means the **Second Sunday of Easter** (or, 1st Sunday after Easter; Quasimodo Geniti; Low Sunday), and its date changes each year because Easter itself changes each year.  
> In old parish registers, priests often wrote dates by feast day or Sunday name instead of writing a modern calendar date. So an entry might say something like “Dominica Quasimodogeniti” instead of “April 8, 1783,” and you have to convert that liturgical label into the actual date for that specific year.

---

<div class="post-metadata">

**Author:** ![dsblank](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/dsblank/32/3649_2.png) [@dsblank](https://gramps.discourse.group/u/dsblank)\
**Post date:** [April 11, 2026, 7:07pm UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/14 "2026-04-11T19:07:51Z")

</div>

> [@emyoulation](#):
>
> There is a [Custom holiday set](https://www.gramps-project.org/wiki/index.php?title=Calendar_tools_holidays) feature in Gramps. However, I have never understood the practical application of the `holidays.xml`.

My first contribution to Gramps was the Calendar report (more than 21 years ago!), and I still print these out every year and give them to my family. The holidays.xml is there for those that want to customize the holidays that show up on the calendar report.

---

<div class="post-metadata">

**Author:** ![Nick-Hall](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/nick-hall/32/95_2.png) [@Nick-Hall](https://gramps.discourse.group/u/Nick-Hall)\
**Post date:** [April 11, 2026, 7:17pm UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/15 "2026-04-11T19:17:09Z")

</div>

> [@dsblank](#):
>
> The holidays.xml is there for those that want to customize the holidays that show up on the calendar report.

This often gets overlooked when a new translation is added.

---

<div class="post-metadata">

**Author:** ![emyoulation](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/emyoulation/32/67_2.png) [@emyoulation](https://gramps.discourse.group/u/emyoulation)\
**Post date:** [April 11, 2026, 8:29pm UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/16 "2026-04-11T20:29:59Z")

</div>

> [@dsblank](#):
>
> My first contribution to Gramps was the Calendar report (more than 21 years ago!), and I still print these out every year and give them to my family. The holidays.xml is there for those that want to customize the holidays that show up on the calendar report.

That would tend to explain why I hadn’t noticed it. And there are no representative screen captures in the wiki for those calendars either. So I grabbed one to be included. &nbsp;[done]&nbsp;

Here’s a capture of part of the [Web Calendar Report](https://www.gramps-project.org/wiki/index.php/Gramps_6.0_Wiki_Manual_-_Reports_-_part_7#Web_Calendar) for January 2021. (In the US, every 4th January has the most (3) Federal holidays of any month: New Years, MLK day on 3rd Monday, and Inauguration Day on the 20th.) Holidays seem not very noticeable.

 ![image](https://global.discourse-cdn.com/free1/uploads/gramps/original/2X/0/0fe76c7dcd5ad82f3d4c340738d8b26f03f5f331.png)

I can skip the “Full year at a Glance” since they have no indicators on the either.

 ![image](https://global.discourse-cdn.com/free1/uploads/gramps/original/2X/2/28d62bfef5b88c61a36ff65f92f545ecede51c42.png)

---

<div class="post-metadata">

**Author:** ![dsblank](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/dsblank/32/3649_2.png) [@dsblank](https://gramps.discourse.group/u/dsblank)\
**Post date:** [April 11, 2026, 9:32pm UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/17 "2026-04-11T21:32:40Z")

</div>

> [@emyoulation](#):
>
> Holidays seem not very noticeable.

It seems we are way off topic. But holidays can be formatted however you like. I use bold italic and they stand out very nicely.

---

<div class="post-metadata">

**Author:** ![emyoulation](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/emyoulation/32/67_2.png) [@emyoulation](https://gramps.discourse.group/u/emyoulation)\
**Post date:** [April 11, 2026, 10:19pm UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/18 "2026-04-11T22:19:52Z")

</div>

> [@dsblank](#):
>
> It seems we are way off topic

Maybe not so far off-topic as it first seems.

### possible integration in the Event Editor

Perhaps the [`holidays.xml`](https://github.com/gramps-project/gramps/blob/master/data/holidays.xml) might be integrated into the date field parser? So instead of duplicating data in multiple files, Gramps just reuses an existing file? Like the [`/gramps/plugins/lib/libholiday.py`](https://github.com/gramps-project/gramps/blob/master/gramps/plugins/lib/libholiday.py) calculates a date.

### Alternatively, augment the Date Selection dialog

@SNoiraud has a nice upgrade to the calendar gramplets with [Pull 2209](https://github.com/gramps-project/gramps/pull/2209). And kindly extended the enhancement to the Date Selection dialog:

 ![2147346335](https://global.discourse-cdn.com/free1/uploads/gramps/original/2X/6/61c3a4a1ce0f98bb5a4c3d470f0d2b59bc859cf4.png)

Perhaps the `Text comment:` could have a parser (similar to the [Lat/Long coordinates field in the Place Editor](https://gramps-project.org/wiki/index.php/Gramps_6.0_Wiki_Manual_-_Entering_and_editing_data:_detailed_-_part_2#Coordinates_Parser) or the “Date in Place” parser in the [Data Entry addon Gramplet](https://gramps-project.org/wiki/index.php/Addon:DataEntryGramplet)) to look up Holiday phrases in the `holidays.xml` for the Country of the Place and calculate a date value? (Perhaps with a way to displace the Text comment but use the value for calculations?)

So entering **Remembrance Sunday 1995** for an Event in **Blackpool, North West England, England, United Kingdom** would look up the Holidays in England, find Remembrance Sunday is the 2nd Sunday in November and associate that Date string with the **12 November 1995** date value.

### England subsection of the [`holidays.xml`](https://github.com/gramps-project/gramps/blob/master/data/holidays.xml):

```python
  ...
  <country name="England">
    <date name="New Year's Day" value="*/1/1" type="national" />
    <date name="Bank Holiday" value="*/1/1" offset="+1" if="dow(y, m, d) == 7" type="national" />
    <date name="Bank Holiday" value="*/1/1" offset="+2" if="dow(y, m, d) == 6" type="national" />
    <date name="Good Friday" value="> easter(y)" offset="-2" type="national" />
    <date name="Easter Monday" value="> easter(y)" offset="+1" type="national" />
    <date name="May Bank Holiday" value="*/1/mon/may" type="national" />
    <date name="Spring Bank Holiday" value="*/-1/mon/may" if="y != 2012" type="national" />
    <date name="Spring Bank Holiday" value="2012/6/4" type="national" />
    <date name="Diamond Jubilee" value="2012/6/5" type="national" />
    <date name="Summer Bank Holiday" value="*/-1/mon/aug" type="national" />
    <date name="Christmas Day" value="*/dec/25" type="national" />
    <date name="Boxing Day" value="*/dec/26" type="national" />
    <date name="Bank Holiday" value="*/dec/25" offset="+2" if="dow(y, m, d) > 5" type="national" />
    <date name="Bank Holiday" value="*/dec/26" offset="+2" if="dow(y, m, d) > 5" type="national" />
    <date name="BST starts" value="*/-1/sun/mar" type="informational" />
    <date name="BST ends" value="*/-1/sun/oct" type="informational" />
    <date name="Valentine's Day" value="*/2/14" type="secular" />
    <date name="Shrove Tuesday" value="> easter(y)" offset="-47" type="religious" />
    <date name="Ash Wednesday" value="> easter(y)" offset="-46" type="religious" />
    <date name="Easter Sunday" value="> easter(y)" type="religious" />
    <date name="April Fool's Day" value="*/4/1" type="secular" />
    <date name="St. George's Day" value="*/4/23" type="secular" />
    <date name="Mothering Sunday" value="> easter(y)" offset="-21" type="secular" />
    <date name="Fathers' Day" value="*/3/sun/jun" type="secular" />
    <date name="Halloween" value="*/10/31" type="secular" />
    <date name="Guy Fawkes Night" value="*/11/5" type="secular" />
    <date name="Armistice Day" value="*/11/11" type="secular" />
    <date name="Remembrance Sunday" value="*/2/sun/nov" type="secular" />
  </country>
    ...

```

I suspect that using SoundEx, Metaphone, Double Metaphone, or NYSIIS (for more fuzzy matching) might reduce the frustration with typos.

---

<div class="post-metadata">

**Author:** ![StoltHD](https://avatars.discourse-cdn.com/v4/letter/s/db5fbb/32.png) [@StoltHD](https://gramps.discourse.group/u/StoltHD)\
**Post date:** [April 11, 2026, 10:26pm UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/19 "2026-04-11T22:26:30Z")

</div>

I think that should be in a “convert dates” gramplet…

If it is made modular, there could be added different calendars as people needed them…

or maybe by using this library?

> **[Pycalcal by espinielli](https://espinielli.github.io/pycalcal/)**

---

<div class="post-metadata">

**Author:** ![emyoulation](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/emyoulation/32/67_2.png) [@emyoulation](https://gramps.discourse.group/u/emyoulation)\
**Post date:** [October 17, 2026, 9:01am UTC](https://gramps.discourse.group/t/built-in-calendar-gramplet/2080/20 "2026-10-17T09:01:33Z")

</div>

Split this topic on October 17, 2026, 9:01am UTC

A post was split to a new topic: [Consolidated Date Editor and slide-out calculator](https://gramps.discourse.group/t/consolidated-date-editor-and-slide-out-calculator/10127)
