capen_inkplate/conf_room/conf_room_layout.py

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()