Stav 23.06.2026
This commit is contained in:
+166
@@ -0,0 +1,166 @@
|
||||
from kivy.uix.popup import Popup
|
||||
from kivy.uix.boxlayout import BoxLayout
|
||||
from kivy.uix.button import Button
|
||||
from kivy.uix.label import Label
|
||||
from kivy.uix.scrollview import ScrollView
|
||||
from kivy.metrics import dp
|
||||
from kivy.clock import Clock
|
||||
import data
|
||||
|
||||
def _popup_info(title: str, text: str, *, monospace: bool = False):
|
||||
from kivy.uix.popup import Popup
|
||||
from kivy.uix.label import Label
|
||||
from kivy.uix.boxlayout import BoxLayout
|
||||
from kivy.uix.scrollview import ScrollView
|
||||
from kivy.uix.button import Button
|
||||
from kivy.metrics import dp
|
||||
from kivy.clock import Clock
|
||||
|
||||
POP_W = dp(520)
|
||||
MIN_H = dp(220)
|
||||
MAX_H = dp(900)
|
||||
|
||||
PAD = dp(12)
|
||||
SP = dp(10)
|
||||
BTN_H = dp(52)
|
||||
|
||||
FONT = dp(18)
|
||||
LINE_H = FONT * 1.35
|
||||
|
||||
TEXT_PAD_X = dp(10)
|
||||
|
||||
# 🔹 výběr fontu
|
||||
font_name = "RobotoMono-Regular.ttf" if monospace else "Roboto-Regular.ttf"
|
||||
|
||||
root = BoxLayout(
|
||||
orientation="vertical",
|
||||
spacing=SP,
|
||||
padding=(PAD, PAD, PAD, PAD),
|
||||
)
|
||||
|
||||
# --- Scroll + text wrapper ---
|
||||
scroll = ScrollView(
|
||||
do_scroll_x=False,
|
||||
do_scroll_y=True,
|
||||
bar_width=dp(8),
|
||||
)
|
||||
|
||||
text_box = BoxLayout(
|
||||
orientation="vertical",
|
||||
size_hint=(1, None),
|
||||
padding=(TEXT_PAD_X, 0, TEXT_PAD_X, 0),
|
||||
)
|
||||
text_box.bind(minimum_height=text_box.setter("height"))
|
||||
|
||||
lbl = Label(
|
||||
text=text or "",
|
||||
halign="left" if monospace else "center",
|
||||
valign="top",
|
||||
font_size=FONT,
|
||||
font_name=font_name,
|
||||
size_hint=(1, None),
|
||||
)
|
||||
|
||||
# --- synchronizace šířky ---
|
||||
def _sync_text_size(*_):
|
||||
inner_w = max(text_box.width - (TEXT_PAD_X * 2), dp(10))
|
||||
lbl.text_size = (inner_w, None)
|
||||
|
||||
# --- synchronizace výšky ---
|
||||
def _sync_label_height(*_):
|
||||
lbl.height = max(lbl.texture_size[1], dp(10))
|
||||
|
||||
lbl.bind(texture_size=_sync_label_height)
|
||||
text_box.bind(width=lambda *_: _sync_text_size())
|
||||
|
||||
text_box.add_widget(lbl)
|
||||
scroll.add_widget(text_box)
|
||||
|
||||
btn = Button(
|
||||
text="OK",
|
||||
size_hint_y=None,
|
||||
height=BTN_H,
|
||||
)
|
||||
|
||||
popup = Popup(
|
||||
title=title,
|
||||
content=root,
|
||||
size_hint=(None, None),
|
||||
size=(POP_W, MIN_H),
|
||||
auto_dismiss=False,
|
||||
)
|
||||
|
||||
def _dismiss_after_touch(*_):
|
||||
Clock.schedule_once(lambda *_: popup.dismiss(), 0)
|
||||
|
||||
btn.bind(on_release=_dismiss_after_touch)
|
||||
|
||||
root.add_widget(scroll)
|
||||
root.add_widget(btn)
|
||||
|
||||
# --- odhad výšky ---
|
||||
lines = (text or "").splitlines() or [""]
|
||||
est_text_h = max(len(lines) * LINE_H, dp(80))
|
||||
est_total_h = est_text_h + BTN_H + 2 * PAD + SP
|
||||
popup.height = min(max(est_total_h, MIN_H), MAX_H)
|
||||
|
||||
# --- doladění po otevření ---
|
||||
def _after_open(*_):
|
||||
_sync_text_size()
|
||||
|
||||
def _measure(*_):
|
||||
real_text_h = lbl.texture_size[1]
|
||||
real_total_h = real_text_h + BTN_H + 2 * PAD + SP
|
||||
popup.height = min(max(real_total_h, MIN_H), MAX_H)
|
||||
|
||||
Clock.schedule_once(_measure, 0)
|
||||
|
||||
Clock.schedule_once(_after_open, 0)
|
||||
|
||||
popup.open()
|
||||
|
||||
# =====================================================
|
||||
# BARVY PODLE TYPU ÚČTU
|
||||
# =====================================================
|
||||
|
||||
UCET_COLORS = {
|
||||
"open": (0.36, 0.36, 0.36, 1),
|
||||
"normal": (0.0, 0.2, 0.0, 1), #zelena
|
||||
"blocked": (0.5, 0.0, 0.35, 1), #tmave cervena
|
||||
"storno": (0.7, 0.2, 0.2, 1),
|
||||
"is_storno": (0.6, 0.6, 0.6, 1),
|
||||
"paymentchg": (0.2, 0.4, 0.8, 1),
|
||||
"occupied": (0.05, 0.1, 0.25, 1) #tmave modra
|
||||
}
|
||||
|
||||
def ucet_ui_type(u: data.UcetSelect, my_client_id: str | None = None) -> str:
|
||||
# --- změna platby ---
|
||||
if u.origin == "Zmena_Platby":
|
||||
return "paymentchg"
|
||||
# --- jsem storno ---
|
||||
if u.is_storno:
|
||||
return "is_storno"
|
||||
# --- byl stornován ---
|
||||
if u.storno:
|
||||
return "storno"
|
||||
# --- otevřený účet ---
|
||||
is_open = (not u.closed_at and not u.ucislo)
|
||||
# --- má položky? ---
|
||||
has_items = bool(getattr(u, "poloz", None))
|
||||
# --- blokovaný ---
|
||||
if u.blocked_by:
|
||||
if my_client_id:
|
||||
owner = u.blocked_by.split("|", 1)[0]
|
||||
if owner != my_client_id:
|
||||
return "blocked"
|
||||
else:
|
||||
return "occupied" if has_items else "open"
|
||||
return "blocked"
|
||||
# --- otevřený účet ---
|
||||
if is_open:
|
||||
if has_items:
|
||||
return "occupied"
|
||||
else:
|
||||
return "open" # prázdný účet = volný stůl
|
||||
# --- fallback ---
|
||||
return "open"
|
||||
Reference in New Issue
Block a user