Hello community, here is the log from the commit of package python-GooCalendar for openSUSE:Factory checked in at 2020-02-24 15:54:45 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-GooCalendar (Old) and /work/SRC/openSUSE:Factory/.python-GooCalendar.new.26092 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-GooCalendar" Mon Feb 24 15:54:45 2020 rev:6 rq:778700 version:0.7.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-GooCalendar/python-GooCalendar.changes 2019-10-07 14:14:27.110834514 +0200 +++ /work/SRC/openSUSE:Factory/.python-GooCalendar.new.26092/python-GooCalendar.changes 2020-02-24 15:57:12.628097253 +0100 @@ -1,0 +2,9 @@ +Mon Feb 24 08:49:48 UTC 2020 - Axel Braun <[email protected]> + +- version 0.7 + * Use Gtk default font as font by default + * Manage non editable event + * Add support for Python 3.8 + * Replace font-desc properties by font + +------------------------------------------------------------------- Old: ---- GooCalendar-0.6.tar.gz New: ---- GooCalendar-0.7.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-GooCalendar.spec ++++++ --- /var/tmp/diff_new_pack.3rNExC/_old 2020-02-24 15:57:14.092100280 +0100 +++ /var/tmp/diff_new_pack.3rNExC/_new 2020-02-24 15:57:14.092100280 +0100 @@ -2,7 +2,7 @@ # spec file for package python-GooCalendar # # Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. -# Copyright (c) 2016-19 Dr. Axel Braun +# Copyright (c) 2016-2020 Dr. Axel Braun # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -20,7 +20,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-GooCalendar -Version: 0.6 +Version: 0.7.0 Release: 0 Summary: A calendar widget for GTK using PyGoocanvas License: GPL-2.0-only ++++++ GooCalendar-0.6.tar.gz -> GooCalendar-0.7.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GooCalendar-0.6/.hgtags new/GooCalendar-0.7.0/.hgtags --- old/GooCalendar-0.6/.hgtags 2019-10-05 23:21:32.000000000 +0200 +++ new/GooCalendar-0.7.0/.hgtags 2020-02-23 16:49:59.000000000 +0100 @@ -4,3 +4,4 @@ 66ceeaa15674495de2792c790c2ee4eacf32a341 0.4 fb5fc95a2f043fd985332b3044858913667f5fa7 0.5 5a820de88fb33d1a8648d9f0862c275bd9d719bc 0.6 +2863da4bcf0fccf2ca705ff7ff40d8611bf2d534 0.7.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GooCalendar-0.6/CHANGELOG new/GooCalendar-0.7.0/CHANGELOG --- old/GooCalendar-0.6/CHANGELOG 2019-10-05 23:21:19.000000000 +0200 +++ new/GooCalendar-0.7.0/CHANGELOG 2020-02-23 16:49:43.000000000 +0100 @@ -1,3 +1,10 @@ +Version 0.7.0 - 2020-02-23 +* Bug fixes (see mercurial logs for details) +* Use Gtk default font as font by default +* Manage non editable event +* Add support for Python 3.8 +* Replace font-desc properties by font + Version 0.6 - 2019-10-05 * Add support for Python 3.7 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GooCalendar-0.6/COPYRIGHT new/GooCalendar-0.7.0/COPYRIGHT --- old/GooCalendar-0.6/COPYRIGHT 2019-02-22 18:34:31.000000000 +0100 +++ new/GooCalendar-0.7.0/COPYRIGHT 2020-02-23 16:46:30.000000000 +0100 @@ -1,5 +1,5 @@ Copyright (C) 2012 Antoine Smolders -Copyright (C) 2012-2019 Cédric Krier +Copyright (C) 2012-2020 Cédric Krier Copyright (C) 2007 Samuel Abels <http://debain.org> This program is free software; you can redistribute it and/or diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GooCalendar-0.6/GooCalendar.egg-info/PKG-INFO new/GooCalendar-0.7.0/GooCalendar.egg-info/PKG-INFO --- old/GooCalendar-0.6/GooCalendar.egg-info/PKG-INFO 2019-10-05 23:22:46.000000000 +0200 +++ new/GooCalendar-0.7.0/GooCalendar.egg-info/PKG-INFO 2020-02-23 16:50:12.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: GooCalendar -Version: 0.6 +Version: 0.7.0 Summary: A calendar widget for GTK using PyGoocanvas Home-page: https://goocalendar.tryton.org/ Author: Cédric Krier @@ -31,10 +31,7 @@ Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2) Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3 Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Topic :: Software Development :: Widget Sets Requires-Python: >=3.4 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GooCalendar-0.6/PKG-INFO new/GooCalendar-0.7.0/PKG-INFO --- old/GooCalendar-0.6/PKG-INFO 2019-10-05 23:22:47.000000000 +0200 +++ new/GooCalendar-0.7.0/PKG-INFO 2020-02-23 16:50:12.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: GooCalendar -Version: 0.6 +Version: 0.7.0 Summary: A calendar widget for GTK using PyGoocanvas Home-page: https://goocalendar.tryton.org/ Author: Cédric Krier @@ -31,10 +31,7 @@ Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2) Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3 Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Topic :: Software Development :: Widget Sets Requires-Python: >=3.4 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GooCalendar-0.6/doc/conf.py new/GooCalendar-0.7.0/doc/conf.py --- old/GooCalendar-0.6/doc/conf.py 2019-04-06 14:49:37.000000000 +0200 +++ new/GooCalendar-0.7.0/doc/conf.py 2019-10-05 23:27:37.000000000 +0200 @@ -46,9 +46,9 @@ # built documents. # # The short X.Y version. -version = '0.6' +version = '0.7' # The full version, including alpha/beta/rc tags. -release = '0.6' +release = '0.7.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GooCalendar-0.6/doc/index.rst new/GooCalendar-0.7.0/doc/index.rst --- old/GooCalendar-0.6/doc/index.rst 2019-09-29 22:57:44.000000000 +0200 +++ new/GooCalendar-0.7.0/doc/index.rst 2020-02-05 12:24:43.000000000 +0100 @@ -274,7 +274,7 @@ The color of the today body. Default: ivory -``font-desc`` +``font`` The attributes specifying which font to use. @@ -377,7 +377,7 @@ :class:`Calendar <goocalendar.Calendar>`. .. class:: goocalendar.Event(caption, start[, end[, all_day[, text_color \ - [, bg_color]]]]) + [, bg_color[, editable]]]]]) *caption* argument is mandatory and will be the string displayed on the event. *start* argument is mandatory and determines the starting time of @@ -387,7 +387,8 @@ All other arguments are optional. *end* argument may be a datetime, all_day a boolean value. An event will be considered as all day event if no *end* argument is supplied. *text_color* and *bg_color* - arguments are supposed to be color strings. + arguments are supposed to be color strings. *editable* determines if the + event can be modified. Instance attributes: @@ -421,6 +422,11 @@ String determining background color. +.. attribute:: editable + + Boolean determining if the event can be modified. + Default value is `True`. + .. attribute:: multidays Boolean property determining if the event is longer than one day. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GooCalendar-0.6/examples/simple.py new/GooCalendar-0.7.0/examples/simple.py --- old/GooCalendar-0.6/examples/simple.py 2019-09-29 23:21:47.000000000 +0200 +++ new/GooCalendar-0.7.0/examples/simple.py 2020-02-23 16:36:49.000000000 +0100 @@ -57,6 +57,13 @@ bg_color='yellow') event_store.add(event) +# A non editable event. +event = Event("Non editable", + datetime.datetime(2007, 10, 9, 10), + datetime.datetime(2007, 10, 9, 11), + editable=False) +event_store.add(event) + # A singularity event. event = Event('Singularity', datetime.datetime(2007, 10, 7, 12), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GooCalendar-0.6/goocalendar/__init__.py new/GooCalendar-0.7.0/goocalendar/__init__.py --- old/GooCalendar-0.6/goocalendar/__init__.py 2019-03-22 15:56:54.000000000 +0100 +++ new/GooCalendar-0.7.0/goocalendar/__init__.py 2019-10-05 23:26:33.000000000 +0200 @@ -8,4 +8,4 @@ from ._event import Event, EventStore __all__ = ['Calendar', 'EventStore', 'Event'] -__version__ = '0.6' +__version__ = '0.7.0' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GooCalendar-0.6/goocalendar/_calendar.py new/GooCalendar-0.7.0/goocalendar/_calendar.py --- old/GooCalendar-0.6/goocalendar/_calendar.py 2019-10-05 23:21:19.000000000 +0200 +++ new/GooCalendar-0.7.0/goocalendar/_calendar.py 2020-02-23 16:38:42.000000000 +0100 @@ -32,8 +32,7 @@ "The color of the body", GObject.ParamFlags.READWRITE), 'today-body-color': (GObject.TYPE_STRING, 'ivory', "Today Body Color", "The color of the today body", GObject.ParamFlags.READWRITE), - # TODO font - 'font-desc': (GObject.TYPE_PYOBJECT, "Font Description", + 'font': (GObject.TYPE_STRING, '', "Font", "The attributes specifying which font to use", GObject.ParamFlags.READWRITE), } @@ -41,6 +40,7 @@ def __init__(self, event_store=None, view="month", time_format="%H:%M", firstweekday=calendar.SUNDAY): super(Calendar, self).__init__() + settings = Gtk.Settings.get_default() self.__props = { 'text-color': '#2E3634', 'inactive-text-color': '#8B8F8E', @@ -49,8 +49,8 @@ 'inactive-border-color': '#E8E7E8', 'body-color': 'white', 'today-body-color': 'ivory', + 'font': settings.get_property('gtk-font-name'), } - self._font_desc = None self._selected_day = None self._bg_rect = None self._timeline = None @@ -109,19 +109,15 @@ self.days.append(box) def do_set_property(self, prop, value): - if prop.name == 'font-desc': - self._font_desc = value - else: - self.__props[prop.name] = value + self.__props[prop.name] = value def do_get_property(self, prop): - if prop.name == 'font-desc': - if self._font_desc is None: - self._font_desc = self.get_style_context().get_property( - 'font', Gtk.StateFlags.NORMAL).copy() - return self._font_desc - else: - return self.__props[prop.name] + return self.__props[prop.name] + + @property + def font_size(self): + return self.get_style_context().get_property( + 'font', Gtk.StateFlags.NORMAL).get_size() def select(self, new_date): cal = calendar.Calendar(self.firstweekday) @@ -136,7 +132,9 @@ elif self.view == "week": old_first_weekday = util.first_day_of_week(cal, old_date) new_first_weekday = util.first_day_of_week(cal, new_date) - page_changed = old_first_weekday != new_first_weekday + page_changed = ( + old_first_weekday != new_first_weekday + or old_date.month != new_date.month) elif self.view == "day": page_changed = old_date != new_date @@ -205,7 +203,7 @@ if self._event_store: self._event_store.disconnect(self._event_removed_sigid) self._event_store.disconnect(self._event_added_sigid) - self._event_store_disconnect(self._events_cleared_sigid) + self._event_store.disconnect(self._events_cleared_sigid) # Set and connect new event_store self._event_store = event_store @@ -253,14 +251,13 @@ """ Draws the currently selected day. """ - pango_size = self.props.font_desc.get_size() x, y, w, h = self.get_bounds() timeline_w = self._timeline.width dayno = self.selected_date.weekday() day_name = calendar.day_name[dayno] # Sum the needed space for the date before the day_name caption_size = len(day_name) + 3 - day_width_min = caption_size * pango_size / Pango.SCALE + day_width_min = caption_size * self.font_size / Pango.SCALE day_width_max = (w - timeline_w) self._day_width = max(day_width_min, day_width_max) self._day_height = h @@ -274,11 +271,11 @@ weeks = util.my_monthdatescalendar(cal, self.selected_date) for weekno, week in enumerate(weeks): # Hide all days that are not part of the current day + for i, date in enumerate(week): + box = self.days[weekno * 7 + i] + box.set_property( + 'visibility', GooCanvas.CanvasItemVisibility.INVISIBLE) if self.selected_date not in week: - for dayno, date in enumerate(week): - box = self.days[weekno * 7 + dayno] - box.set_property( - 'visibility', GooCanvas.CanvasItemVisibility.INVISIBLE) continue if self.selected_date == datetime.date.today(): @@ -307,12 +304,11 @@ """ Draws the currently selected week. """ - pango_size = self.props.font_desc.get_size() x, y, w, h = self.get_bounds() timeline_w = self._timeline.width caption_size = max(len(day_name) for day_name in calendar.day_name) caption_size += 3 # The needed space for the date before the day_name - day_width_min = caption_size * pango_size / Pango.SCALE + day_width_min = caption_size * self.font_size / Pango.SCALE day_width_max = (w - timeline_w) / 7 self._day_width = max(day_width_min, day_width_max) self._day_height = h @@ -372,10 +368,9 @@ Draws the currently selected month. """ x1, y1, w, h = self.get_bounds() - pango_size = self.props.font_desc.get_size() caption_size = max(len(day_name) for day_name in calendar.day_name) caption_size += 3 # The needed space for the date before the day_name - day_width_min = caption_size * pango_size / Pango.SCALE + day_width_min = caption_size * self.font_size / Pango.SCALE day_width_max = w / 7 self._day_width = max(day_width_min, day_width_max) self._day_height = h / 6 @@ -441,7 +436,7 @@ def _get_day_item(self, find_date): cal = calendar.Calendar(self.firstweekday) - weeks = util.my_monthdatescalendar(cal, find_date) + weeks = util.my_monthdatescalendar(cal, self.selected_date) for weekno, week in enumerate(weeks): for dayno, date in enumerate(week): if date == find_date: @@ -474,8 +469,8 @@ return days raise Exception('Days not found: %s %s' % (event.start, end)) - def _find_free_line(self, days): - for line in range(days[0].n_lines): + def _find_free_line(self, days, n_lines): + for line in range(n_lines): free = True for day in days: if line in day.lines: @@ -487,7 +482,6 @@ def draw_events(self): _, _, bound_width, _ = self.get_bounds() - timeline_witdh = self._timeline.width # Clear previous events. for item in self._event_items: item.remove() @@ -522,7 +516,7 @@ events.sort(key=util.event_days, reverse=True) # Draw all-day events, longest event first. - max_y = self._selected_day.line_height + max_y = 0 non_all_day_events = [] for event in events: event.event_items = [] @@ -534,7 +528,10 @@ # Find a line that is free in all of the days. days = self._get_day_items(event) - free_line = self._find_free_line(days) + n_lines = days[0].n_lines + if self.view in {"week", "day"}: + n_lines = min(n_lines // 2, max(n_lines - 24, 0)) + free_line = self._find_free_line(days, n_lines) if free_line is None: for day in days: day.show_indic = True @@ -547,7 +544,9 @@ all_day_events_height += 1 # 1px padding-top max_y = max(all_day_events_height, max_y) for day in days: - day.lines[free_line] = 1 + for i in range(free_line, + free_line + len(event.caption.splitlines())): + day.lines[i] = 1 # Split days into weeks. weeks = [] @@ -578,8 +577,8 @@ self._event_items.append(event_item) self.get_root_item().add_child(event_item, -1) if self.view == "day": - x_start = timeline_witdh - width = bound_width + x_start = self._timeline.width + width = bound_width - self._timeline.width else: x_start = day.x width = (day.width + 2) * len(week) @@ -609,6 +608,9 @@ event_item.width -= 6 event_item.type = 'leftright' event_item.update() + # Add the day title + if self._selected_day: + max_y += self._selected_day.line_height if self.view == "month": return @@ -689,8 +691,8 @@ y_off1 = top_offset_mins * self.minute_height y_off2 = bottom_offset_mins * self.minute_height if self.view == "day": - x_start = timeline_witdh - column_width = w / parallel + x_start = self._timeline.width + column_width = (w - self._timeline.width) / parallel else: column_width = day.width / parallel x_start = day.x @@ -793,81 +795,86 @@ @util.left_click def on_event_item_button_press_event(self, event_item, rect, event): - # Drag and drop starting coordinates - self._drag_x = event.x - self._drag_y = event.y - self._drag_height = 0 - self._drag_start_date = self.get_cur_pointed_date(event.x, event.y) - self._drag_date = self._drag_start_date - self.set_has_tooltip(False) - event_item.raise_(None) - event_item.transparent = True - - event_item.width = self._day_width - 6 # Biggest event width - event_date = event_item.event.start.date() - daysdelta = self._drag_start_date - event_date - if self.view == 'week': - event_item.x = event_item.left_border - if ((event_item.event.all_day or event_item.event.multidays) - and self._drag_start_date != event_date): - event_item.x += daysdelta.days * self._day_width - event_item.event.start += daysdelta - if event_item.event.end: - event_item.event.end += daysdelta - else: - for item in event_item.event.event_items: - if item != event_item: - item.remove() - self._event_items.remove(item) - - event_item.height = 2 * self._line_height - day_no = (int((event.x - self._timeline.width) - / self._day_width)) - day_off = day_no * self._day_width + 2 - event_item.x = self._timeline.width + day_off - if (event_item.no_caption or event.y < event_item.y - or event.y > (event_item.y + event_item.height)): - # click was not performed inside the new day item - level_height = self.minute_height * self.MIN_PER_LEVEL - cur_level = int((event.y - self._timeline.y) - / level_height) - nb_levels_per_hour = 60 / self.MIN_PER_LEVEL - cur_level -= nb_levels_per_hour # click is in the middle - if cur_level < 0: - cur_level = 0 - event_item.y = self._timeline.y + cur_level * level_height - nb_minutes = cur_level * self.MIN_PER_LEVEL - minutes = nb_minutes % 60 - hours = nb_minutes / 60 - old_start = event_item.event.start - new_start = \ - datetime.datetime.combine(self._drag_start_date, - datetime.time(hours, minutes)) - event_item.event.start = new_start - delta = new_start - old_start - if event_item.event.end: - event_item.event.end += delta - event_item.no_caption = False - elif self.view == 'month': - for item in event_item.event.event_items: - if item != event_item: - item.remove() - self._event_items.remove(item) - else: + if event_item.event.editable: + # Drag and drop starting coordinates + self._drag_x = event.x + self._drag_y = event.y + self._drag_height = 0 + self._drag_start_date = self.get_cur_pointed_date(event.x, event.y) + self._drag_date = self._drag_start_date + self.set_has_tooltip(False) + event_item.raise_(None) + event_item.transparent = True + + event_item.width = self._day_width - 6 # Biggest event width + event_date = event_item.event.start.date() + daysdelta = self._drag_start_date - event_date + if self.view == 'week': + event_item.x = event_item.left_border + if ((event_item.event.all_day or event_item.event.multidays) + and self._drag_start_date != event_date): + event_item.x += daysdelta.days * self._day_width event_item.event.start += daysdelta if event_item.event.end: event_item.event.end += daysdelta - weekno = int(event.y / self._day_height) - day_no = int(event.x / self._day_width) - event_item.y = weekno * self._day_height - event_item.y += int(self._line_height) + 1 # padding-top - event_item.x = day_no * self._day_width + 2 # padding-left - item_height = self._line_height + 2 # 2px between items - while event_item.y < event.y: - event_item.y += item_height - event_item.y -= item_height + else: + for item in event_item.event.event_items: + if item != event_item: + item.remove() + self._event_items.remove(item) + + event_item.height = 2 * self._line_height + day_no = (int((event.x - self._timeline.width) + / self._day_width)) + day_off = day_no * self._day_width + 2 + event_item.x = self._timeline.width + day_off + if (event_item.no_caption or event.y < event_item.y + or event.y > (event_item.y + event_item.height)): + # click was not performed inside the new day item + level_height = self.minute_height * self.MIN_PER_LEVEL + cur_level = int((event.y - self._timeline.y) + / level_height) + nb_levels_per_hour = 60 / self.MIN_PER_LEVEL + # click is in the middle + cur_level -= nb_levels_per_hour + if cur_level < 0: + cur_level = 0 + event_item.y = ( + self._timeline.y + cur_level * level_height) + nb_minutes = cur_level * self.MIN_PER_LEVEL + hours, minutes = map(int, divmod(nb_minutes, 60)) + old_start = event_item.event.start + new_start = \ + datetime.datetime.combine(self._drag_start_date, + datetime.time(hours, minutes)) + event_item.event.start = new_start + delta = new_start - old_start + if event_item.event.end: + event_item.event.end += delta event_item.no_caption = False - event_item.update() + elif self.view == 'month': + for item in event_item.event.event_items: + if item != event_item: + item.remove() + self._event_items.remove(item) + else: + event_item.event.start += daysdelta + if event_item.event.end: + event_item.event.end += daysdelta + weekno = int(event.y / self._day_height) + day_no = int(event.x / self._day_width) + event_item.y = weekno * self._day_height + event_item.y += ( + int(self._line_height) + 1) # padding-top + event_item.x = ( + day_no * self._day_width + 2) # padding-left + item_height = ( + self._line_height + 2) # 2px between items + while event_item.y < event.y: + event_item.y += item_height + event_item.y -= item_height + event_item.no_caption = False + event_item.update() self.emit('event-pressed', event_item.event) if self._is_double_click(event): @@ -1040,7 +1047,7 @@ week_day = self.date.weekday() day_name = calendar.day_name[week_day] caption = '%s %s' % (self.date.day, day_name) - self.text.set_property('font-desc', self._cal.props.font_desc) + self.text.set_property('font', self._cal.props.font) self.text.set_property('text', caption) logical_height = self.text.get_natural_extents()[1].height line_height = int(math.ceil(float(logical_height) / Pango.SCALE)) @@ -1132,7 +1139,7 @@ # Create canvas items. self.box = GooCanvas.CanvasRect(parent=self) self.text = GooCanvas.CanvasText(parent=self) - self.text.set_property('font-desc', self._cal.props.font_desc) + self.text.set_property('font', self._cal.props.font) logical_height = self.text.get_natural_extents()[1].height self.line_height = logical_height / Pango.SCALE @@ -1315,6 +1322,8 @@ if self.x is not None: self.update() + else: + self._compute_width() @property def min_line_height(self): @@ -1333,21 +1342,20 @@ def line_height(self): self.padding_top = 0 line_height = self.min_line_height - if line_height < self.height / 24: - line_height = self.height / 24 - pango_size = self._cal.props.font_desc.get_size() - padding_top = (line_height - pango_size / Pango.SCALE) / 2 + if line_height < self.height // 24: + line_height = self.height // 24 + padding_top = (line_height - self._cal.font_size / Pango.SCALE) / 2 padding_top -= int(math.ceil( float(self.ink_padding_top) / Pango.SCALE)) self.padding_top = padding_top return line_height def _compute_width(self): - font_desc = self._cal.props.font_desc + font = self._cal.props.font ink_padding_left = 0 ink_max_width = 0 for n in range(24): - self._timeline_text[n].set_property('font-desc', font_desc) + self._timeline_text[n].set_property('font', font) natural_extents = self._timeline_text[n].get_natural_extents() ink_rect = natural_extents[0] ink_padding_left = max(ink_padding_left, ink_rect.x) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GooCalendar-0.6/goocalendar/_event.py new/GooCalendar-0.7.0/goocalendar/_event.py --- old/GooCalendar-0.6/goocalendar/_event.py 2019-02-22 17:34:29.000000000 +0100 +++ new/GooCalendar-0.7.0/goocalendar/_event.py 2020-02-05 12:24:43.000000000 +0100 @@ -20,6 +20,7 @@ self.caption = caption self.start = start self.end = end + self.editable = kwargs.get('editable', True) self.all_day = kwargs.get('all_day', False) self.text_color = kwargs.get('text_color', None) self.bg_color = kwargs.get('bg_color', 'orangered') @@ -35,13 +36,17 @@ def __eq__(self, other_event): if not isinstance(other_event, Event): - raise NotImplemented - return (self.start, self.end) == (other_event.start, other_event.start) + return NotImplemented + return (self.start, self.end) == (other_event.start, other_event.end) def __lt__(self, other_event): + def convert(event): + start = event.start + end = event.end if event.end is not None else event.start + return start, end if not isinstance(other_event, Event): - raise NotImplemented - return (self.start, self.end) < (other_event.start, other_event.start) + return NotImplemented + return convert(self) < convert(other_event) class EventStore(GObject.GObject): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/GooCalendar-0.6/setup.py new/GooCalendar-0.7.0/setup.py --- old/GooCalendar-0.6/setup.py 2019-03-28 22:26:21.000000000 +0100 +++ new/GooCalendar-0.7.0/setup.py 2019-12-26 10:29:08.000000000 +0100 @@ -5,6 +5,7 @@ import io import os +import re from setuptools import setup, find_packages @@ -14,8 +15,13 @@ 'r', encoding='utf-8').read() +def get_version(): + init = read(os.path.join('goocalendar', '__init__.py')) + return re.search("__version__ = '([0-9.]*)'", init).group(1) + + setup(name='GooCalendar', - version='0.6', + version=get_version(), author='Cédric Krier', author_email='[email protected]', url='https://goocalendar.tryton.org/', @@ -28,10 +34,7 @@ 'Intended Audience :: Developers', 'License :: OSI Approved :: GNU General Public License v2 (GPLv2)', 'Operating System :: OS Independent', - 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3', 'Topic :: Software Development :: Libraries :: Python Modules', 'Topic :: Software Development :: Widget Sets', ],
