v0.1.2 — Header finalized with background color and live clock
This commit is contained in:
parent
76ade4bf0b
commit
64f0e74105
6
main.py
6
main.py
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
Loading…
Reference in New Issue
Block a user