182 lines
9.8 KiB
Python
182 lines
9.8 KiB
Python
from typing import Callable
|
|
|
|
from rio import Component, Rectangle, Grid, Column, Row, Text, TextStyle, Color, PointerEventListener, Spacer
|
|
|
|
from src.ezgg_lan_manager.components.SeatingPlanPixels import SeatPixel, WallPixel, InvisiblePixel, TextPixel
|
|
from src.ezgg_lan_manager.types.Seat import Seat
|
|
|
|
MAX_GRID_WIDTH_PIXELS = 34
|
|
MAX_GRID_HEIGHT_PIXELS = 60
|
|
|
|
class SeatingPlanLegend(Component):
|
|
def build(self) -> Component:
|
|
return Column(
|
|
Text("Legende", style=TextStyle(fill=self.session.theme.neutral_color), justify="center", margin=1),
|
|
Row(
|
|
Spacer(),
|
|
Rectangle(
|
|
content=Text("Deluxe Platz", style=TextStyle(fill=self.session.theme.neutral_color, font_size=0.7), margin=0.2, justify="center"),
|
|
fill=Color.TRANSPARENT,
|
|
stroke_width=0.2,
|
|
stroke_color=Color.from_hex("66ff99"),
|
|
min_width=20
|
|
),
|
|
Spacer()
|
|
),
|
|
Row(
|
|
Rectangle(
|
|
content=Column(
|
|
Text(f"Freier Platz", style=TextStyle(fill=self.session.theme.primary_color, font_size=0.7), align_x=0.5, selectable=False),
|
|
Text(f"", style=TextStyle(fill=self.session.theme.primary_color, font_size=0.9), align_x=0.5,
|
|
selectable=False, overflow="wrap")
|
|
),
|
|
min_width=1,
|
|
min_height=1,
|
|
fill=self.session.theme.success_color,
|
|
grow_x=False,
|
|
grow_y=False,
|
|
hover_fill=self.session.theme.success_color,
|
|
transition_time=0.4,
|
|
ripple=True
|
|
),
|
|
Rectangle(
|
|
content=Column(
|
|
Text(f"Belegter Platz", style=TextStyle(fill=self.session.theme.primary_color, font_size=0.7), align_x=0.5, selectable=False),
|
|
Text(f"", style=TextStyle(fill=self.session.theme.primary_color, font_size=0.9), align_x=0.5,
|
|
selectable=False, overflow="wrap")
|
|
),
|
|
min_width=1,
|
|
min_height=1,
|
|
fill=self.session.theme.danger_color,
|
|
grow_x=False,
|
|
grow_y=False,
|
|
hover_fill=self.session.theme.danger_color,
|
|
transition_time=0.4,
|
|
ripple=True
|
|
),
|
|
Rectangle(
|
|
content=Column(
|
|
Text(f"Eigener Platz", style=TextStyle(fill=self.session.theme.primary_color, font_size=0.7), align_x=0.5, selectable=False),
|
|
Text(f"", style=TextStyle(fill=self.session.theme.primary_color, font_size=0.9), align_x=0.5,
|
|
selectable=False, overflow="wrap")
|
|
),
|
|
min_width=1,
|
|
min_height=1,
|
|
fill=Color.from_hex("800080"),
|
|
grow_x=False,
|
|
grow_y=False,
|
|
hover_fill=Color.from_hex("800080"),
|
|
transition_time=0.4,
|
|
ripple=True
|
|
),
|
|
margin=1,
|
|
spacing=1
|
|
)
|
|
)
|
|
|
|
|
|
class SeatingPlan(Component):
|
|
seat_clicked_cb: Callable
|
|
seating_info: list[Seat]
|
|
info_clicked_cb: Callable
|
|
|
|
def get_seat(self, seat_id: str) -> Seat:
|
|
seat = next(filter(lambda seat_: seat_.seat_id == seat_id, self.seating_info), None)
|
|
return seat if seat else Seat(seat_id="Z99", is_blocked=True, category="LUXUS", user=None)
|
|
|
|
"""
|
|
This seating plan is for the community center "Donsbach"
|
|
"""
|
|
def build(self) -> Component:
|
|
grid = Grid()
|
|
# Outlines
|
|
for x in range(0, MAX_GRID_WIDTH_PIXELS):
|
|
grid.add(WallPixel(), row=0, column=x)
|
|
|
|
for y in range(0, MAX_GRID_HEIGHT_PIXELS):
|
|
grid.add(WallPixel(), row=y, column=0)
|
|
|
|
for x in range(0, MAX_GRID_WIDTH_PIXELS):
|
|
grid.add(WallPixel(), row=MAX_GRID_HEIGHT_PIXELS, column=x)
|
|
|
|
for y in range(0, 39):
|
|
grid.add(WallPixel(), row=y, column=MAX_GRID_WIDTH_PIXELS)
|
|
|
|
for y in range(43, MAX_GRID_HEIGHT_PIXELS + 1):
|
|
grid.add(WallPixel(), row=y, column=MAX_GRID_WIDTH_PIXELS)
|
|
|
|
for x in range(19, MAX_GRID_WIDTH_PIXELS):
|
|
grid.add(WallPixel(), row=37, column=x)
|
|
|
|
|
|
for x in range(19, MAX_GRID_WIDTH_PIXELS):
|
|
grid.add(WallPixel(), row=46, column=x)
|
|
for x in range(1, 15):
|
|
grid.add(WallPixel(), row=46, column=x)
|
|
|
|
# Gaderobe
|
|
grid.add(PointerEventListener(
|
|
TextPixel(text="Gaderobe"),
|
|
on_press=lambda _: self.info_clicked_cb("Gaderobe")
|
|
), row=44, column=19, width=15, height=2)
|
|
|
|
for x in range(19, MAX_GRID_WIDTH_PIXELS):
|
|
grid.add(WallPixel(), row=28, column=x)
|
|
for x in range(1, 15):
|
|
grid.add(WallPixel(), row=28, column=x)
|
|
|
|
# # Toilet
|
|
grid.add(PointerEventListener(
|
|
TextPixel(icon_name="material/wc"),
|
|
on_press=lambda _: self.info_clicked_cb("Toilette")
|
|
), row=29, column=1, width=14, height=17)
|
|
|
|
grid.add(PointerEventListener(
|
|
TextPixel(text="Orga & Technik"),
|
|
on_press=lambda _: self.info_clicked_cb("Hier bauen wir die Technik auf.")
|
|
), row=29, column=19, width=15, height=8)
|
|
|
|
grid.add(PointerEventListener(
|
|
TextPixel(text="Bar & Schnarchbereich"),
|
|
on_press=lambda _: self.info_clicked_cb("Bier.")
|
|
), row=47, column=1, width=MAX_GRID_WIDTH_PIXELS-1, height=13)
|
|
|
|
# # Block A
|
|
grid.add(SeatPixel("A\n0\n1", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("A01"), seat_orientation="left"), row=2, column=5, width=2, height=4)
|
|
grid.add(SeatPixel("A\n0\n2", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("A02"), seat_orientation="left"), row=6, column=5, width=2, height=4)
|
|
grid.add(SeatPixel("A\n0\n3", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("A03"), seat_orientation="left"), row=10, column=5, width=2, height=4)
|
|
grid.add(SeatPixel("A\n0\n4", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("A04"), seat_orientation="left"), row=15, column=5, width=2, height=4)
|
|
grid.add(SeatPixel("A\n0\n5", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("A05"), seat_orientation="left"), row=19, column=5, width=2, height=4)
|
|
grid.add(SeatPixel("A\n0\n6", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("A06"), seat_orientation="left"), row=23, column=5, width=2, height=4)
|
|
|
|
grid.add(SeatPixel("A\n1\n0", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("A10"), seat_orientation="left"), row=2, column=7, width=2, height=4)
|
|
grid.add(SeatPixel("A\n1\n1", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("A11"), seat_orientation="left"), row=6, column=7, width=2, height=4)
|
|
grid.add(SeatPixel("A\n1\n2", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("A12"), seat_orientation="left"), row=10, column=7, width=2, height=4)
|
|
grid.add(SeatPixel("A\n1\n3", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("A13"), seat_orientation="left"), row=15, column=7, width=2, height=4)
|
|
grid.add(SeatPixel("A\n1\n4", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("A14"), seat_orientation="left"), row=19, column=7, width=2, height=4)
|
|
grid.add(SeatPixel("A\n1\n5", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("A15"), seat_orientation="left"), row=23, column=7, width=2, height=4)
|
|
|
|
grid.add(SeatPixel("B\n0\n1", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("B01"), seat_orientation="left"), row=2, column=26, width=2, height=4)
|
|
grid.add(SeatPixel("B\n0\n2", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("B02"), seat_orientation="left"), row=6, column=26, width=2, height=4)
|
|
grid.add(SeatPixel("B\n0\n3", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("B03"), seat_orientation="left"), row=10, column=26, width=2, height=4)
|
|
grid.add(SeatPixel("B\n0\n4", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("B04"), seat_orientation="left"), row=15, column=26, width=2, height=4)
|
|
grid.add(SeatPixel("B\n0\n5", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("B05"), seat_orientation="left"), row=19, column=26, width=2, height=4)
|
|
grid.add(SeatPixel("B\n0\n6", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("B06"), seat_orientation="left"), row=23, column=26, width=2, height=4)
|
|
|
|
grid.add(SeatPixel("B\n1\n0", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("B10"), seat_orientation="left"), row=2, column=28, width=2, height=4)
|
|
grid.add(SeatPixel("B\n1\n1", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("B11"), seat_orientation="left"), row=6, column=28, width=2, height=4)
|
|
grid.add(SeatPixel("B\n1\n2", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("B12"), seat_orientation="left"), row=10, column=28, width=2, height=4)
|
|
grid.add(SeatPixel("B\n1\n3", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("B13"), seat_orientation="left"), row=15, column=28, width=2, height=4)
|
|
grid.add(SeatPixel("B\n1\n4", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("B14"), seat_orientation="left"), row=19, column=28, width=2, height=4)
|
|
grid.add(SeatPixel("B\n1\n5", on_press_cb=self.seat_clicked_cb, seat=self.get_seat("B15"), seat_orientation="left"), row=23, column=28, width=2, height=4)
|
|
return Rectangle(
|
|
content=grid,
|
|
grow_x=True,
|
|
grow_y=True,
|
|
stroke_color=self.session.theme.neutral_color,
|
|
stroke_width=0.1,
|
|
fill=self.session.theme.primary_color,
|
|
margin=0.5
|
|
)
|
|
|