You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
4.3 KiB
114 lines
4.3 KiB
from PIL import Image, ImageDraw, ImageFont, ImageOps
|
|
import re
|
|
import time
|
|
import widgets.widget as widget
|
|
import argparse
|
|
import os
|
|
import toml
|
|
try:
|
|
import drivers.epd7in5b
|
|
testMode = False
|
|
except:
|
|
testMode = True
|
|
|
|
mydir = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
parser = argparse.ArgumentParser(description="NotiFrame display")
|
|
parser.add_argument('-t', '--test', help='enable test mode', action='store_true')
|
|
args = parser.parse_args()
|
|
if args.test:
|
|
testMode = True
|
|
|
|
print("RUNNING IN TESTMODE: "+str(testMode))
|
|
|
|
if not testMode:
|
|
epd = epd7in5b.EPD()
|
|
epd.init()
|
|
|
|
def convert(input):
|
|
if isinstance(input, dict):
|
|
return dict((convert(key), convert(value)) for key, value in input.iteritems())
|
|
elif isinstance(input, list):
|
|
return [convert(element) for element in input]
|
|
elif isinstance(input, unicode):
|
|
return input.encode('utf-8')
|
|
else:
|
|
return input
|
|
|
|
uni_config = toml.load(os.path.join(mydir, 'config.toml'))
|
|
config = convert(uni_config)
|
|
|
|
config2 = {'resWidth': 640, 'resHeight': 384, 'cellsWidth': 3, 'cellsHeight': 3, 'widgets': [
|
|
{'type': 'image', 'posX': 0, 'posY': 0, 'width': 3, 'height': 3, 'bwStyle': 'mono', 'scaleMode': 'fill', 'filename': 'forest.jpg'},
|
|
{'type': 'trello', 'posX': 0, 'posY': 0, 'width': 1, 'height': 3, 'board': 'Organisation', 'list': 'Plans'},
|
|
{'type': 'trello', 'posX': 1, 'posY': 0, 'width': 2, 'height': 3, 'board': 'E-paper', 'list': 'To Do:'}
|
|
]}
|
|
|
|
#print(toml.dumps(config))
|
|
print(config)
|
|
print(config2)
|
|
|
|
cwidth = int(round(config['resWidth']/config['cellsWidth']))
|
|
cheight = int(round(config['resHeight']/config['cellsHeight']))
|
|
|
|
image_yellow = Image.new('1', (config['resWidth'], config['resHeight']), 255) # 255: clear the frame
|
|
draw_yellow = ImageDraw.Draw(image_yellow)
|
|
image_black = Image.new('1', (config['resWidth'], config['resHeight']), 255) # 255: clear the frame
|
|
draw_black = ImageDraw.Draw(image_black)
|
|
|
|
#str1 = open("text.txt", "r").read()
|
|
#str2 = open("text.txt", "r").read()
|
|
#str3 = open("text.txt", "r").read()
|
|
#strList = []
|
|
#strList.append(str1)
|
|
#strList.append(str2)
|
|
#strList.append(str3)
|
|
|
|
def initWidgets():
|
|
widgetList = []
|
|
for widg_conf in config['widgets']:
|
|
if widg_conf['type'] == 'image':
|
|
widgetList.append(widget.ImageWidget(cwidth, cheight, (widg_conf['posX'], widg_conf['posY']),
|
|
(widg_conf['width'], widg_conf['height']), widg_conf['bwStyle'], widg_conf['scaleMode'],
|
|
os.path.join(mydir, os.path.join('widgets/resources/images/', widg_conf['filename']))))
|
|
if widg_conf['type'] == 'trello':
|
|
widgetList.append(widget.TrelloWidget(cwidth, cheight, (widg_conf['posX'], widg_conf['posY']),
|
|
(widg_conf['width'], widg_conf['height']), widg_conf['board'], widg_conf['list']))
|
|
|
|
#widgetList.append(widget.ImageWidget(cwidth, cheight, (0, 0), (3, 3), "mono", "fill", os.path.join(mydir, os.path.join('widgets/resources/images/', 'forest.jpg'))))
|
|
#widgetList.append(widget.TrelloWidget(cwidth, cheight, (0, 0), (1, 3), "Organisation", "Plans"))
|
|
#widgetList.append(widget.TrelloWidget(cwidth, cheight, (1, 0), (2, 3), "E-paper", "Done"))
|
|
#widgetList.append(widget.ImageWidget(cwidth, cheight, (1, 2), (2, 1), "mono", "fill", "forest.jpg"))
|
|
#widgetList.append(widget.TextWidget(cwidth, cheight, (0, 0), (1, 3), str2))
|
|
#widgetList.append(widget.TextWidget(cwidth, cheight, (0, 0), (2, 3), str1))
|
|
#widgetList.append(widget.ImageWidget(cwidth, cheight, (1, 0), (1, 3), "mono", "fill", "g.jpg"))
|
|
return widgetList
|
|
|
|
def drawWidget(w):
|
|
coordX = w.cellX*cwidth
|
|
coordY = w.cellY*cheight
|
|
image_black.paste(im=w.image_black, mask=w.mask_black, box=(coordX, coordY))
|
|
image_yellow.paste(w.image_yellow, (coordX, coordY))
|
|
|
|
def render(index):
|
|
if index is not 0:
|
|
for widg in widgetList:
|
|
widg.updateWidget()
|
|
draw_black.rectangle(xy=((0,0), image_black.size), fill=255)
|
|
draw_yellow.rectangle(xy=((0,0), image_yellow.size), fill=255)
|
|
for widg in widgetList:
|
|
drawWidget(widg)
|
|
if not testMode:
|
|
epd.display_frame(epd.get_frame_buffer(image_black),epd.get_frame_buffer(image_yellow))
|
|
else:
|
|
image_black.save(os.path.join(mydir, 'test/imgBlack.bmp'))
|
|
image_yellow.save(os.path.join(mydir, 'test/imgYellow.bmp'))
|
|
|
|
widgetList = initWidgets()
|
|
i = 0
|
|
while(True):
|
|
print("RENDERING "+str(i))
|
|
render(i)
|
|
i = (i + 1)
|
|
#time.sleep(10)
|