summaryrefslogtreecommitdiffstats
path: root/gui-project/main_ui.py
diff options
context:
space:
mode:
authorAndreeaRadoescu <randreea23@gmail.com>2024-10-14 23:07:09 +0200
committerAndreeaRadoescu <randreea23@gmail.com>2024-10-14 23:07:09 +0200
commit2d385a869488c54513c58e95cd78bb3053a41208 (patch)
tree2f46b4dfbd270886460f49cb041b4958a74dffc2 /gui-project/main_ui.py
parent29d891f67252382d976a025d5c42488161d08f0f (diff)
fix ui colors for cards, moved all functionality in MainUI class, added session configuration UIfeature/addGUI
Diffstat (limited to 'gui-project/main_ui.py')
-rw-r--r--gui-project/main_ui.py96
1 files changed, 96 insertions, 0 deletions
diff --git a/gui-project/main_ui.py b/gui-project/main_ui.py
new file mode 100644
index 0000000..f6351b0
--- /dev/null
+++ b/gui-project/main_ui.py
@@ -0,0 +1,96 @@
+from nicegui import ui
+import os
+import random
+import sys
+from cards import CardUI, CardComponent
+from flashcards import Session, SCHEDULERS
+FLASHCARDS_ROOT="/home/andreear/git/schwiizertuutsch/flashcards"
+
+class MainUI():
+ def __init__(self):
+ # ===== default value for a session ========
+ self.nb_questions = 1
+ self.prompt_type = "Front"
+ self.fcards = ["saetze-allgemein.fcard"]
+ self.run_mode = "practice"
+
+ # ========= start initializing UI ===========
+ with ui.header() as self.header:
+ self.header_element = ui.label("Session Configuration")
+ self.root_ui = ui.row().classes("fixed-center")
+ with self.root_ui:
+ with ui.card(align_items="baseline") as self.session_configuration:
+ self.initialize_session_ui()
+
+ def initialize_session_ui(self):
+ all_fcards = os.listdir(FLASHCARDS_ROOT)
+
+ with ui.row(align_items="center"):
+ ui.label("Number of questions:")
+ self.nb_questions_ui = ui.number(placeholder='e.g.: 20', min=1, step=1, precision=0, value=15).props(
+ 'rounded outlined dense')
+ with ui.row(align_items="center"):
+ ui.label("Prompt type:")
+ self.prompt_sel_ui = ui.select(["Front", "Back", "Random"], value="Back")
+ with ui.row(align_items="center"):
+ ui.label("Select cards to play from:")
+ self.cards_sel_ui = ui.select(all_fcards, multiple=True, value=all_fcards[:2]) \
+ .classes('w-64').props('use-chips')
+ with ui.button_group():
+ ui.button("Practice mode", color="positive",
+ on_click=lambda: self.prepare_session("practice"))
+ ui.button("Test mode", color="negative",
+ on_click=lambda: self.prepare_session("test"))
+
+ async def prepare_session(self, run_mode : str):
+ self.header.clear()
+
+ if run_mode == "practice":
+ self.header.classes("bg-positive")
+ else:
+ self.header.classes("bg-negative")
+
+ with self.header:
+ self.header_element = ui.markdown(f"Currently in **{run_mode}** mode")
+
+ self.run_mode = run_mode
+ # read values from UI and set session configuration
+ self.nb_questions = int(self.nb_questions_ui.value)
+ self.prompt_type = self.prompt_sel_ui.value
+ self.fcards = self.cards_sel_ui.value
+
+ assert type(self.fcards) is list
+ assert type(self.nb_questions) is int
+ assert type(self.prompt_type) is str
+
+ self.session_configuration.set_visibility(False)
+ await self.start_session()
+
+ async def start_session(self):
+ ui.notify("Started session")
+ print("My config")
+ cards_paths = [os.path.join(FLASHCARDS_ROOT, x) for x in self.fcards]
+ session = Session("brutal", cards_paths,
+ "/home/andreear/git/flashcards/state.txt")
+
+ ui.colors(frontc='#bcdbc6', back="#c4bcdb")
+ for i, card in enumerate(session.practice(self.nb_questions)):
+ prompt_type_binary = self.prompt_type.lower()
+ if self.prompt_type.lower() == "random":
+ random_nb = random.randint(0, sys.maxsize)
+ if random_nb % 2 == 0:
+ prompt_type_binary = "front"
+ else:
+ prompt_type_binary = "back"
+
+ if prompt_type_binary == "front":
+ card_component = CardComponent(card.front, card.back)
+ else:
+ card_component = CardComponent(card.back, card.front)
+
+ card_ui = CardUI(self.root_ui, card_component)
+
+ card_ui.show_front()
+ await card_ui.is_answered()
+ card_ui.hide_card()
+