Added event day highlights

This commit is contained in:
Maximilian Giller 2019-03-02 09:36:55 +01:00
parent 10f006b1ef
commit b7692efa35
2 changed files with 32 additions and 96 deletions

View file

@ -61,53 +61,9 @@ def main ():
owm = OwmForecasts.OwmForecasts(api_key)
design.add_weather(OwmForecasts.OwmForecasts(api_key))
#"""Filter upcoming events from your iCalendar/s"""
#debug.print_line('Fetching events from your calendar' + '\n')
#events_cal = IcalEvents.IcalEvents(ical_urls)
#for event in events_cal.get_month_events():
# debug.print_event(event)
#upcoming = events_cal.get_upcoming_events()
#events_this_month = events_cal.get_month_events()
#events_this_month = [event.begin_datetime.day for event in events_this_month]
#def takeDate (elem):
# return elem.begin_datetime
#upcoming.sort(key=takeDate)
#del upcoming[4:]
## uncomment the following 2 lines to display the fetched events
## from your iCalendar
#debug.print_line('Upcoming events:')
#debug.print_line(upcoming)
#debug.print_line('Month events:')
#debug.print_line(events_this_month)
debug.print_line('Fetching events from your calendar' + '\n')
events_cal = IcalEvents.IcalEvents(ical_urls)
design.add_calendar(events_cal)
##Credit to Hubert for suggesting truncating event names
#def write_text_left (box_width, box_height, text, tuple):
@ -127,42 +83,6 @@ def main ():
#for events in range(len(upcoming)):
# write_text_left(314, 25, (upcoming[events].title), event_positions['e' + str(events + 1)])
#"""Draw smaller squares on days with events"""
#for numbers in events_this_month:
# if numbers in cal[0]:
# draw(positions['a' + str(cal[0].index(numbers) + 1)], eventicon)
# if numbers in cal[1]:
# draw(positions['b' + str(cal[1].index(numbers) + 1)], eventicon)
# if numbers in cal[2]:
# draw(positions['c' + str(cal[2].index(numbers) + 1)], eventicon)
# if numbers in cal[3]:
# draw(positions['d' + str(cal[3].index(numbers) + 1)], eventicon)
# if numbers in cal[4]:
# draw(positions['e' + str(cal[4].index(numbers) + 1)], eventicon)
# try:
# if numbers in cal[5]:
# draw(positions['f' + str(cal[5].index(numbers) + 1)], eventicon)
# except IndexError:
# pass
#"""Draw a larger square on today's date"""
#today = time.day
#if today in cal[0]:
# draw(positions['a' + str(cal[0].index(today) + 1)], dateicon)
#if today in cal[1]:
# draw(positions['b' + str(cal[1].index(today) + 1)], dateicon)
#if today in cal[2]:
# draw(positions['c' + str(cal[2].index(today) + 1)], dateicon)
#if today in cal[3]:
# draw(positions['d' + str(cal[3].index(today) + 1)], dateicon)
#if today in cal[4]:
# draw(positions['e' + str(cal[4].index(today) + 1)], dateicon)
#try:
# if today in cal[5]:
# draw(positions['f' + str(cal[5].index(today) + 1)], dateicon)
#except IndexError:
# pass
for output in output_adapters:
output.render(design)

View file

@ -1,7 +1,7 @@
from PanelDesign import PanelDesign
from Assets import *
from settings import *
import calendar
import calendar as callib
from datetime import datetime, timedelta
from WeatherHeaderDesign import WeatherHeaderDesign
from PIL import ImageDraw
@ -23,6 +23,7 @@ weekdayrowpos = (0, 0.209)
weekrowboxsize = (1, 0.044)
weekdaytextsize = 18
weekrownameboxsize = (0.143, 0.044)
eventcirclehorizontalsize = 0.100
class MonthOvPanel (PanelDesign):
"""Overview that focuses on the current month and
@ -33,9 +34,10 @@ class MonthOvPanel (PanelDesign):
def __first_render__ (self):
if week_starts_on == "Monday":
calendar.setfirstweekday(calendar.MONDAY)
callib.setfirstweekday(callib.MONDAY)
elif week_starts_on == "Sunday":
calendar.setfirstweekday(calendar.SUNDAY)
callib.setfirstweekday(callib.SUNDAY)
self.__week_days__ = self.__get_week_days_ordered__()
self.__draw_month_name__()
self.__draw_seperator__()
@ -45,12 +47,26 @@ class MonthOvPanel (PanelDesign):
def add_weather (self, weather):
self.draw_design(WeatherHeaderDesign(self.__abs_pos__(weatherheadersize), weather))
def add_calendar (self, calendar):
raise NotImplementedError("Functions needs to be implemented")
def add_rssfeed (self, rss):
raise NotImplementedError("Functions needs to be implemented")
def add_calendar (self, calendar):
month_events = list(set([ (event.begin_datetime.day, event.begin_datetime.month, event.begin_datetime.year) for event in calendar.get_month_events()]))
for event in month_events:
self.__draw_highlight_event_day__(event)
def __draw_highlight_event_day__ (self, date):
first_month_week = datetime(date[2], date[1], 1).isocalendar()[1]
cur_date = datetime(date[2], date[1], date[0])
side_length = int(eventcirclehorizontalsize * self.size[0])
circle_size = (side_length,side_length)
pos = self.__get_day_pos__(cur_date.isocalendar()[1] - first_month_week, self.__get_day_of_week__(cur_date))
place_size = self.__abs_pos__(daynumberboxsize)
pos = (int(pos[0] + (place_size[0] - circle_size[0]) / 2), int(pos[1] + (place_size[1] - circle_size[1]) / 2))
self.__draw_highlight_circle__(circle_size, pos, 'red', width=2)
def __abs_pos__ (self, pos, size = None):
if size is None:
size = self.size
@ -84,7 +100,7 @@ class MonthOvPanel (PanelDesign):
def __draw_month_overview__ (self):
"""Using the built-in calendar function, draw icons for each
number of the month (1,2,3,...28,29,30)"""
cal = calendar.monthcalendar(datetime.now().year, datetime.now().month)
cal = callib.monthcalendar(datetime.now().year, datetime.now().month)
for week in cal:
for numbers in week:
self.__draw_day_number__(numbers, self.__get_day_pos__(cal.index(week), week.index(numbers)))
@ -92,14 +108,12 @@ class MonthOvPanel (PanelDesign):
self.__draw_highlight_box__(self.__abs_pos__(dayhighlightboxsize), self.__get_today_box_pos__(), width=3)
def __draw_week_row__ (self):
week_days = self.__get_week_days_ordered__()
for day_of_week, day in enumerate(week_days):
for day_of_week, day in enumerate(self.__week_days__):
txt = TextDesign(self.__abs_pos__(weekrownameboxsize), fontsize=weekdaytextsize, text=str(day), verticalalignment="center", horizontalalignment="center")
txt.pos = self.__get_week_day_pos__(day_of_week)
self.draw_design(txt)
self.__draw_highlight_box__(self.__abs_pos__(weekrownameboxsize), self.__get_week_day_pos__(week_days.index(datetime.now().strftime("%a"))), width=1)
self.__draw_highlight_box__(self.__abs_pos__(weekrownameboxsize), self.__get_week_day_pos__(self.__get_day_of_week__(datetime.now())), width=1)
def __get_week_day_pos__ (self, day_of_week):
maxwidth, _ = self.__abs_pos__(monthovsize)
@ -108,10 +122,12 @@ class MonthOvPanel (PanelDesign):
return (int(posx + day_of_week * partialwidth), int(posy))
def __get_today_box_pos__ (self):
week_days = self.__get_week_days_ordered__()
x, y = self.__get_day_pos__(int(datetime.now().day / 7), week_days.index(datetime.now().strftime("%a")))
x, y = self.__get_day_pos__(int(datetime.now().day / 7), self.__get_day_of_week__(datetime.now()))
return (x, int(y + (self.__abs_pos__(daynumberboxsize)[1] - self.__abs_pos__(dayhighlightboxsize)[1]) / 2))
def __get_day_of_week__ (self, date):
return self.__week_days__.index(date.strftime("%a"))
def __draw_highlight_box__ (self, size, pos, color='black', width=1):
design = BoxDesign(size, outline=color, width = width)
design.pos = pos