Added event day highlights
This commit is contained in:
parent
10f006b1ef
commit
b7692efa35
2 changed files with 32 additions and 96 deletions
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue