105 lines
3 KiB
Python
105 lines
3 KiB
Python
import math
|
|
from pathlib import Path
|
|
from typing import TYPE_CHECKING
|
|
|
|
from source.gui.position import vw, vh, top, vh_full, vw_full
|
|
from source.path import path_history
|
|
from source.gui import widget, texture
|
|
from source.gui.scene.abc import Scene
|
|
|
|
|
|
if TYPE_CHECKING:
|
|
from source.gui.window import Window
|
|
|
|
|
|
class HistoryMenu(Scene):
|
|
PAGE_SIZE: int = 8
|
|
|
|
def __init__(self, window: "Window", page: int = 0, **kwargs):
|
|
super().__init__(window, **kwargs)
|
|
|
|
self.background = self.add_widget(
|
|
widget.Image,
|
|
|
|
x=0, y=0, width=vw_full, height=vh_full,
|
|
|
|
image=texture.Background.time
|
|
)
|
|
|
|
self.back = self.add_widget(
|
|
widget.Button,
|
|
x=20, y=20, width=20*vw, height=10*vh,
|
|
|
|
label_text="Retour",
|
|
|
|
style=texture.Button.Style1
|
|
)
|
|
|
|
from source.gui.scene import MainMenu
|
|
self.back.add_listener("on_click_release", lambda *_: self.window.set_scene(MainMenu))
|
|
|
|
# génère les boutons des sauvegardes
|
|
paths: list[Path] = list(path_history.iterdir())
|
|
page_max: int = math.ceil(len(paths) / self.PAGE_SIZE)
|
|
|
|
self.title = self.add_widget(
|
|
widget.Text,
|
|
|
|
x=50*vw, y=80*vh,
|
|
|
|
anchor_x="center",
|
|
|
|
text=f"Page {page+1}/{page_max}",
|
|
font_size=50
|
|
)
|
|
|
|
for i, path in enumerate(paths[page*self.PAGE_SIZE:(page+1)*self.PAGE_SIZE]):
|
|
button = self.add_widget(
|
|
widget.Button,
|
|
|
|
x=25*vw, y=top((25 + (i*9))*vh), width=50*vw, height=8*vh,
|
|
|
|
label_text=path.stem,
|
|
|
|
style=texture.Button.Style1
|
|
)
|
|
|
|
from source.gui.scene import HistoryGame
|
|
button.add_listener(
|
|
"on_click_release",
|
|
(lambda path: (lambda *_: self.window.set_scene(HistoryGame, history_path=path)))(path)
|
|
)
|
|
|
|
if page > 0:
|
|
# si nous ne sommes pas à la première page, ajoute un bouton "précédent".
|
|
self.previous = self.add_widget(
|
|
widget.Button,
|
|
x=10*vw, y=45*vh, width=8*vw, height=15*vh,
|
|
|
|
label_text="<",
|
|
label_font_size=30,
|
|
|
|
style=texture.Button.Style1
|
|
)
|
|
|
|
self.previous.add_listener(
|
|
"on_click_release",
|
|
lambda *_: self.window.set_scene(self.__class__, page=page-1)
|
|
)
|
|
|
|
if page < page_max - 1:
|
|
# si nous ne sommes pas à la dernière page, ajoute un bouton "suivant".
|
|
self.next = self.add_widget(
|
|
widget.Button,
|
|
x=80*vw, y=45*vh, width=8*vw, height=15*vh,
|
|
|
|
label_text=">",
|
|
label_font_size=30,
|
|
|
|
style=texture.Button.Style1
|
|
)
|
|
|
|
self.next.add_listener(
|
|
"on_click_release",
|
|
lambda *_: self.window.set_scene(self.__class__, page=page+1)
|
|
)
|