diff --git a/Calendar/E-Paper.py b/Calendar/E-Paper.py index c1b5bb7..e45f81d 100644 --- a/Calendar/E-Paper.py +++ b/Calendar/E-Paper.py @@ -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) diff --git a/Calendar/MonthOvPanel.py b/Calendar/MonthOvPanel.py index 1e20f54..ecdf651 100644 --- a/Calendar/MonthOvPanel.py +++ b/Calendar/MonthOvPanel.py @@ -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