By specifying a layout, you can format the page directly, instead of having to overrride write_row.
This commit is contained in:
parent
84925687ca
commit
0adabf7758
2 changed files with 38 additions and 21 deletions
|
@ -10,12 +10,18 @@ from time import sleep
|
||||||
|
|
||||||
from deutschebahn.db_infoscreen import DBInfoscreen
|
from deutschebahn.db_infoscreen import DBInfoscreen
|
||||||
|
|
||||||
from buba.bubaanimator import BubaAnimation
|
from buba.bubaanimator import BubaAnimation, LineLayoutColumn
|
||||||
from buba.bubacmd import BubaCmd
|
from buba.bubacmd import BubaCmd
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
class DBFAnimation(BubaAnimation):
|
class DBFAnimation(BubaAnimation):
|
||||||
|
dbf_layout = [
|
||||||
|
LineLayoutColumn(12, BubaCmd.ALIGN_LEFT),
|
||||||
|
LineLayoutColumn(81, BubaCmd.ALIGN_LEFT),
|
||||||
|
LineLayoutColumn(27, BubaCmd.ALIGN_RIGHT),
|
||||||
|
]
|
||||||
|
|
||||||
def __init__(self, buba: BubaCmd, ds100="AHST", station="Holstenstraße", count=3):
|
def __init__(self, buba: BubaCmd, ds100="AHST", station="Holstenstraße", count=3):
|
||||||
super().__init__(buba)
|
super().__init__(buba)
|
||||||
self.dbi = DBInfoscreen("trains.xatlabs.com")
|
self.dbi = DBInfoscreen("trains.xatlabs.com")
|
||||||
|
@ -99,20 +105,9 @@ class DBFAnimation(BubaAnimation):
|
||||||
train = train.replace(" ", "")
|
train = train.replace(" ", "")
|
||||||
return train
|
return train
|
||||||
|
|
||||||
def write_row(self, row: int, line: list[str], split=100) -> None:
|
|
||||||
if len(line) < 3:
|
|
||||||
super().write_row(row, line)
|
|
||||||
else:
|
|
||||||
self.buba.text(page=0, row=row, col_start=0, col_end=11,
|
|
||||||
text=line[0])
|
|
||||||
self.buba.text(page=0, row=row, col_start=12, col_end=104,
|
|
||||||
text=line[1])
|
|
||||||
self.buba.text(page=0, row=row, col_start=105, col_end=119,
|
|
||||||
text=line[2], align=BubaCmd.ALIGN_RIGHT)
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.pages(self.station, [[
|
self.pages(self.station, [[
|
||||||
self.short_train(train['train']),
|
self.short_train(train['train']),
|
||||||
self.short_station(train['destination']),
|
self.short_station(train['destination']),
|
||||||
self.countdown(train['actualDeparture'], train['isCancelled']),
|
self.countdown(train['actualDeparture'], train['isCancelled']),
|
||||||
] for train in self.trains[:self.count]])
|
] for train in self.trains[:self.count]], layout=self.dbf_layout)
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import logging
|
import logging
|
||||||
|
from dataclasses import dataclass
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from itertools import islice
|
from itertools import islice
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
|
@ -19,7 +20,18 @@ WEEKDAYS_DE = [
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# class layout with width, alignment; list of layouts
|
||||||
|
@dataclass
|
||||||
|
class LineLayoutColumn:
|
||||||
|
width: int
|
||||||
|
align: int
|
||||||
|
|
||||||
|
|
||||||
class BubaAnimation:
|
class BubaAnimation:
|
||||||
|
default_layout = [
|
||||||
|
LineLayoutColumn(90, BubaCmd.ALIGN_LEFT),
|
||||||
|
LineLayoutColumn(30, BubaCmd.ALIGN_RIGHT),
|
||||||
|
]
|
||||||
def __init__(self, buba: BubaCmd):
|
def __init__(self, buba: BubaCmd):
|
||||||
self.log = logging.getLogger(type(self).__name__)
|
self.log = logging.getLogger(type(self).__name__)
|
||||||
self.buba = buba
|
self.buba = buba
|
||||||
|
@ -82,22 +94,32 @@ class BubaAnimation:
|
||||||
text = text[:max - 2] + "..." # we can get away with just 2, since the periods are very narrow
|
text = text[:max - 2] + "..." # we can get away with just 2, since the periods are very narrow
|
||||||
return text
|
return text
|
||||||
|
|
||||||
def write_row(self, row: int, line: list[str], split=100) -> None:
|
def write_row(self, row: int, line: list[str], layout: list[LineLayoutColumn]) -> None:
|
||||||
|
# pass a layout with n columns, or make it an instance variable
|
||||||
if len(line) == 1:
|
if len(line) == 1:
|
||||||
self.buba.text(page=0, row=row, col_start=0, col_end=119,
|
self.buba.text(page=0, row=row, col_start=0, col_end=119,
|
||||||
text=self.ellipsis(line[0], 35), align=BubaCmd.ALIGN_LEFT)
|
text=self.ellipsis(line[0], 35), align=BubaCmd.ALIGN_LEFT)
|
||||||
|
elif len(line) < len(layout) and len(line) == 2:
|
||||||
|
self.write_row(row, line, self.default_layout)
|
||||||
else:
|
else:
|
||||||
self.buba.text(page=0, row=row, col_start=0, col_end=split, text=self.ellipsis(line[0], 25))
|
col = 0
|
||||||
self.buba.text(page=0, row=row, col_start=split+1, col_end=119,
|
for i, ll in enumerate(layout):
|
||||||
text=line[1], align=BubaCmd.ALIGN_RIGHT)
|
t = line[i] if len(line) > i else ""
|
||||||
|
if ll.width > 24:
|
||||||
|
t = self.ellipsis(t, int(ll.width / 3.7))
|
||||||
|
self.buba.text(page=0, row=row, col_start=col, col_end=col+ll.width-1, text=t, align=ll.align)
|
||||||
|
col += ll.width
|
||||||
|
|
||||||
def pages(self, title: str, lines: list[list[str]]) -> None:
|
def pages(self, title: str, lines: list[list[str]], layout=None) -> None:
|
||||||
|
# pass the layout through to write_row
|
||||||
|
if layout is None:
|
||||||
|
layout = self.default_layout
|
||||||
pages = list(self.chunk(lines, 3))
|
pages = list(self.chunk(lines, 3))
|
||||||
for n, page in enumerate(pages):
|
for n, page in enumerate(pages):
|
||||||
if len(pages) <= 1:
|
if len(pages) <= 1:
|
||||||
self.write_row(0, [title])
|
self.write_row(0, [title], layout)
|
||||||
else:
|
else:
|
||||||
self.write_row(0, [title, f"({n + 1}/{len(pages)})"])
|
self.write_row(0, [title, f"({n + 1}/{len(pages)})"], layout)
|
||||||
for i in range(3):
|
for i in range(3):
|
||||||
if i >= len(page):
|
if i >= len(page):
|
||||||
self.buba.text(page=0, row=i + 1, col_start=0, col_end=119, text="")
|
self.buba.text(page=0, row=i + 1, col_start=0, col_end=119, text="")
|
||||||
|
@ -105,7 +127,7 @@ class BubaAnimation:
|
||||||
p = page[i]
|
p = page[i]
|
||||||
if isinstance(p, str):
|
if isinstance(p, str):
|
||||||
p = [p, ]
|
p = [p, ]
|
||||||
self.write_row(i + 1, p)
|
self.write_row(i + 1, p, layout)
|
||||||
sleep(10)
|
sleep(10)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue