v0.1.2 — Header finalized with background color and live clock

This commit is contained in:
Stu Leak 2025-11-03 11:11:26 -05:00
parent 76ade4bf0b
commit 64f0e74105
2 changed files with 77 additions and 0 deletions

View File

@ -7,11 +7,13 @@
# ============================================================
import tkinter as tk
from src.config_manager import ConfigManager
from src.telefact_renderer import TelefactRenderer
from src.core.telefact_frame import TelefactFrame
from src.core.telefact_formatter import TelefactFormatter
from src.core.telefact_header import TelefactHeader
from src.core.telefact_footer import TelefactFooter
def main():
@ -39,6 +41,10 @@ def main():
header.render()
header.update_time(root, renderer)
# --- Initialize footer ---
footer = TelefactFooter(frame, config)
footer.render_test_footer()
# --- Body & footer test content ---
formatter = TelefactFormatter(frame)
formatter.add_body_line(1, "Welcome to the Telefact Broadcaster base.", align="center", color="white")

View File

@ -0,0 +1,71 @@
# ============================================================
# File: /home/stu/Projects/Local REPO/telefact/src/core/telefact_footer.py
# Description:
# Dynamic Telefact footer renderer for broadcaster mode.
# Draws a single bottom-row text band with background color
# and per-page contextual support.
# ============================================================
from src.core.telefact_frame import TelefactFrame
class TelefactFooter:
"""
Ceefax-style footer (bottom band).
Example:
Telefact: The world at your fingertips
"""
def __init__(self, frame: TelefactFrame, config: dict):
self.frame = frame
self.config = config
# default colors from global config
colours = config.get("Colours", {})
self.default_bg = colours.get("Footer", "blue")
self.default_fg = colours.get("TextPrimary", "white")
# reserved footer row (last visible line)
self.row = frame.rows - 1
# --------------------------------------------------------
def clear_footer(self, bg: str | None = None):
"""Clears the footer line with background fill."""
bg_color = bg or self.default_bg
for c in range(self.frame.cols):
self.frame.set_cell(c, self.row, " ", self.default_fg, bg_color)
# --------------------------------------------------------
def set_footer(self, text: str, align: str = "left", fg: str | None = None, bg: str | None = None):
"""Draw a footer message with color and alignment control."""
fg_color = fg or self.default_fg
bg_color = bg or self.default_bg
self.clear_footer(bg_color)
text = text.strip()
text_len = len(text)
# --- Alignment handling ---
if align == "center":
start_col = (self.frame.cols - text_len) // 2
elif align == "right":
start_col = max(self.frame.cols - text_len - 1, 0)
else:
start_col = 1
# --- Background fill ---
for c in range(self.frame.cols):
self.frame.set_cell(c, self.row, " ", fg_color, bg_color)
# --- Text overlay ---
for i, ch in enumerate(text):
pos = start_col + i
if 0 <= pos < self.frame.cols:
self.frame.set_cell(pos, self.row, ch, fg_color)
# --------------------------------------------------------
def render_test_footer(self):
"""Temporary demo for testing footer display."""
self.set_footer("Telefact: The world at your fingertips", align="left", fg="yellow", bg="blue")