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