111 lines
2.8 KiB
Python
111 lines
2.8 KiB
Python
from soldered_inkplate6PLUS import Inkplate
|
|
import time
|
|
from ub_sched import Event
|
|
|
|
START_HOUR = 8
|
|
END_HOUR = 18
|
|
|
|
DISPLAY = Inkplate(Inkplate.INKPLATE_2BIT)
|
|
DISPLAY.begin()
|
|
BLACK = 0
|
|
|
|
MONTHS = [
|
|
"???",
|
|
"Jan.",
|
|
"Feb.",
|
|
"Mar.",
|
|
"Apr.",
|
|
"May ",
|
|
"Jun.",
|
|
"Jul.",
|
|
"Aug.",
|
|
"Sep.",
|
|
"Oct.",
|
|
"Nov.",
|
|
"Dec.",
|
|
]
|
|
|
|
WEEKDAYS = [
|
|
"Mon.",
|
|
"Tue.",
|
|
"Wed.",
|
|
"Thu.",
|
|
"Fri.",
|
|
"Sat.",
|
|
"Sun.",
|
|
]
|
|
|
|
def date_str():
|
|
(year, month, mday, hour, minute, second, weekday, yearday) = time.localtime()
|
|
# print(weekday, month, mday, year)
|
|
return
|
|
|
|
def drawText(x, y, s, size = DISPLAY.textSize, color = BLACK):
|
|
DISPLAY.GFX._very_slow_text(x, y, s, size, color)
|
|
|
|
def render_display(events):
|
|
(year, month, mday, hour, minute, second, weekday, yearday) = time.localtime()
|
|
display = DISPLAY
|
|
print("On a display of size", display.width(), display.height())
|
|
|
|
print("Xu Li... Do the thing!")
|
|
display.clearDisplay()
|
|
|
|
print("Drawing header")
|
|
drawText(20, 20, "Capen 212A", size = 4)
|
|
drawText(680, 30, "{} {} {}, {}".format(WEEKDAYS[weekday], MONTHS[month], mday, year), size = 3)
|
|
display.drawFastHLine(0, 60, display.width(), BLACK)
|
|
calendar_top = 60
|
|
calendar_left = 10
|
|
calendar_height = display.height() - calendar_top;
|
|
calendar_width = display.width() - 20;
|
|
hour_step = calendar_height / (END_HOUR - START_HOUR)
|
|
|
|
print("Drawing day planner")
|
|
for i in range(START_HOUR, END_HOUR):
|
|
y = int( (i - START_HOUR) * hour_step + calendar_top )
|
|
display.drawFastHLine(
|
|
int(calendar_left+40), y,
|
|
calendar_width-40,
|
|
BLACK
|
|
)
|
|
hour = i
|
|
ampm = "AM"
|
|
if hour >= 12:
|
|
ampm = "PM"
|
|
if hour > 12:
|
|
hour -= 12
|
|
drawText(10, y+2, "{} {}".format(hour, ampm), size = 1)
|
|
|
|
print("Drawing events")
|
|
for event in events:
|
|
if event.start.is_date(year, month, mday) or event.end.is_date(year, month, mday):
|
|
print("Drawing {}".format(event.event))
|
|
if (not event.start.is_date(year, month, mday)) or event.start.hour < START_HOUR:
|
|
low_hour = 0.0
|
|
else:
|
|
low_hour = event.start.hour + (event.start.minute / 60) - START_HOUR
|
|
|
|
if (not event.end.is_date(year, month, mday)) or event.end.hour >= END_HOUR:
|
|
high_hour = float(END_HOUR - START_HOUR)
|
|
else:
|
|
high_hour = event.end.hour + (event.end.minute / 60) - START_HOUR
|
|
|
|
x0 = calendar_left+50
|
|
y0 = int(low_hour * hour_step) + calendar_top + 10
|
|
w = calendar_width-60
|
|
h = int((high_hour - low_hour) * hour_step) - 20
|
|
radius = 8
|
|
|
|
print(low_hour, high_hour, "//", x0, y0, w, h)
|
|
|
|
display.fillRoundRect(x0, y0, w, h, radius, 1)
|
|
display.drawRoundRect(x0, y0, w, h, radius, 0)
|
|
drawText(x0+10, y0+10, event.event, size = 2)
|
|
|
|
else:
|
|
print("Skipping {}; not today".format(event.event))
|
|
|
|
print("Rendering")
|
|
display.display()
|