Rewrite of the entire codebase
This commit is contained in:
parent
5ca54bc04f
commit
56abbe1644
1 changed files with 95 additions and 523 deletions
618
main.py
618
main.py
|
@ -1,505 +1,103 @@
|
|||
import flet as ft
|
||||
|
||||
# vars
|
||||
grade1 = "#F44336"
|
||||
grade2 = "#FF9800"
|
||||
grade3 = "#eebd00"
|
||||
grade4 = "#4CAF50"
|
||||
grade5 = "#2196F3"
|
||||
grade6 = "#9C27B0"
|
||||
gradeother = "#5D5D5D"
|
||||
# Grade colors
|
||||
GRADE_COLORS = {
|
||||
1: "#F44336",
|
||||
2: "#FF9800",
|
||||
3: "#eebd00",
|
||||
4: "#4CAF50",
|
||||
5: "#2196F3",
|
||||
6: "#9C27B0",
|
||||
"other": "#5D5D5D"
|
||||
}
|
||||
|
||||
SUBJECTS = [
|
||||
"Matematyka", "Język polski", "Język Angielski",
|
||||
"Informatyka", "Język Niemiecki", "Chemia"
|
||||
]
|
||||
|
||||
NAV_ITEMS = [
|
||||
(ft.Icons.HOME, "Home"),
|
||||
(ft.Icons.LOOKS_6, "Grades"),
|
||||
(ft.Icons.BACKPACK, "Timetable"),
|
||||
(ft.Icons.BOOK, "Homework"),
|
||||
(ft.Icons.CALENDAR_TODAY, "Exams"),
|
||||
(ft.Icons.EVENT_NOTE, "Attendance"),
|
||||
(ft.Icons.STICKY_NOTE_2, "Behaviour"),
|
||||
(ft.Icons.SETTINGS, "Settings")
|
||||
]
|
||||
|
||||
def main(page: ft.Page):
|
||||
page.title = "Fuji"
|
||||
page.theme = ft.Theme(color_scheme_seed=ft.Colors.RED)
|
||||
|
||||
def changePage(index):
|
||||
pages = [
|
||||
# Home page
|
||||
ft.Column([
|
||||
|
||||
def create_grade_container(grade: int):
|
||||
return ft.Container(
|
||||
content=ft.Text(str(grade)),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=GRADE_COLORS.get(grade, GRADE_COLORS["other"]),
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
)
|
||||
|
||||
def create_subject_row(subject: str):
|
||||
return ft.Row([
|
||||
ft.Text(subject, size=16, weight="normal"),
|
||||
*[create_grade_container(grade) for grade in range(6, 0, -1)]
|
||||
])
|
||||
|
||||
def create_card(title: str, icon, content):
|
||||
return ft.Container(
|
||||
content=ft.Column([
|
||||
ft.Row([
|
||||
ft.Icon(icon, size=32, color="#FFFFFF"),
|
||||
ft.Text(title, size=24, font_family="Roboto", weight="bold")
|
||||
]),
|
||||
ft.ListView(
|
||||
controls=[content],
|
||||
expand=True,
|
||||
spacing=10,
|
||||
padding=10,
|
||||
auto_scroll=False
|
||||
)
|
||||
]),
|
||||
margin=20,
|
||||
padding=10,
|
||||
alignment=ft.alignment.top_left,
|
||||
bgcolor='#271D1C',
|
||||
width=420,
|
||||
height=270,
|
||||
border_radius=10,
|
||||
)
|
||||
|
||||
def change_page(index):
|
||||
if index == 0: # Home Page
|
||||
timetable_content = ft.Text("1. Lorem ipsum\n"*10, size=16, weight="normal")
|
||||
grades_content = ft.Column([create_subject_row(subject) for subject in SUBJECTS])
|
||||
|
||||
return ft.Column([
|
||||
ft.Text(" Home", size=30, weight="bold"),
|
||||
ft.Text("\n", size=30, weight="bold"),
|
||||
ft.Row([
|
||||
ft.Container( # Timetable Card
|
||||
content=ft.Column([
|
||||
ft.Row([
|
||||
ft.Icon(ft.Icons.BACKPACK_OUTLINED, size=32, color="#FFFFFF"),
|
||||
ft.Text("Timetable", size=24, font_family="Roboto", weight="bold")
|
||||
]),
|
||||
ft.ListView(
|
||||
controls=[
|
||||
ft.Text("1. Lorem ipsum\n2. Lorem ipsum\n3. Lorem ipsum\n4. Im curious what happens if i ran out of space\n5. It just creates a new line\n6. No idea why i tested that\n7. I also want to test what happens if there is too much lines\n8. Lorem ipsum\n9. Yay now you can scroll\n10. Looks like dogshit but it works\n11. Simi simi jej simi jaj", size=16, weight="normal")
|
||||
],
|
||||
expand=True,
|
||||
spacing=10,
|
||||
padding=10,
|
||||
auto_scroll=False
|
||||
)
|
||||
]),
|
||||
margin=20,
|
||||
padding=10,
|
||||
alignment=ft.alignment.top_left,
|
||||
bgcolor='#271D1C',
|
||||
width=420,
|
||||
height=270,
|
||||
border_radius=10,
|
||||
),
|
||||
|
||||
ft.Container( # Recent Grades Card
|
||||
content=ft.Column([
|
||||
ft.Row([
|
||||
ft.Icon(ft.Icons.LOOKS_6_OUTLINED, size=32, color="#FFFFFF"),
|
||||
ft.Text("Recent Grades", size=24, font_family="Roboto", weight="bold")
|
||||
]),
|
||||
ft.ListView(
|
||||
controls=[
|
||||
ft.Row([
|
||||
ft.Text("Matematyka", size=16, weight="normal"),
|
||||
ft.Container(
|
||||
content=ft.Text("6"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade6,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("5"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade5,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("4"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade4,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("3"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade3,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("2"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade2,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("1"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade1,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
]),
|
||||
ft.Row([
|
||||
ft.Text("Język polski", size=16, weight="normal"),
|
||||
ft.Container(
|
||||
content=ft.Text("6"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade6,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("5"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade5,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("4"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade4,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("3"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade3,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("2"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade2,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("1"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade1,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
]),
|
||||
ft.Row([
|
||||
ft.Text("Język Angielski", size=16, weight="normal"),
|
||||
ft.Container(
|
||||
content=ft.Text("6"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade6,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("5"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade5,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("4"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade4,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("3"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade3,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("2"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade2,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("1"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade1,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
]),
|
||||
ft.Row([
|
||||
ft.Text("Informatyka", size=16, weight="normal"),
|
||||
ft.Container(
|
||||
content=ft.Text("6"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade6,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("5"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade5,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("4"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade4,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("3"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade3,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("2"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade2,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("1"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade1,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
]),
|
||||
ft.Row([
|
||||
ft.Text("Język Niemiecki", size=16, weight="normal"),
|
||||
ft.Container(
|
||||
content=ft.Text("6"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade6,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("5"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade5,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("4"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade4,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("3"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade3,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("2"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade2,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("1"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade1,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
]),
|
||||
ft.Row([
|
||||
ft.Text("Chemia", size=16, weight="normal"),
|
||||
ft.Container(
|
||||
content=ft.Text("6"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade6,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("5"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade5,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("4"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade4,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("3"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade3,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("2"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade2,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Text("1"),
|
||||
margin=0,
|
||||
padding=0,
|
||||
alignment=ft.alignment.center,
|
||||
bgcolor=grade1,
|
||||
width=20,
|
||||
height=20,
|
||||
border_radius=5,
|
||||
),
|
||||
]),
|
||||
],
|
||||
expand=False,
|
||||
spacing=10,
|
||||
padding=10,
|
||||
auto_scroll=False
|
||||
)
|
||||
]),
|
||||
margin=20,
|
||||
padding=10,
|
||||
alignment=ft.alignment.top_left,
|
||||
bgcolor='#271D1C',
|
||||
width=420,
|
||||
height=270,
|
||||
border_radius=10,
|
||||
),
|
||||
]),
|
||||
|
||||
]),
|
||||
|
||||
# Grades page
|
||||
ft.Column([
|
||||
ft.Text(" Grades", size=30, weight="bold"),
|
||||
]),
|
||||
create_card("Timetable", ft.Icons.BACKPACK_OUTLINED, timetable_content),
|
||||
create_card("Recent Grades", ft.Icons.LOOKS_6_OUTLINED, grades_content)
|
||||
])
|
||||
])
|
||||
|
||||
# Other pages
|
||||
return ft.Column([
|
||||
ft.Text(f" {NAV_ITEMS[index][1]}", size=30, weight="bold"),
|
||||
])
|
||||
|
||||
# Timetable page
|
||||
ft.Column([
|
||||
ft.Text(" Timetable", size=30, weight="bold"),
|
||||
]),
|
||||
|
||||
# Homework page
|
||||
ft.Column([
|
||||
ft.Text(" Homework", size=30, weight="bold"),
|
||||
]),
|
||||
|
||||
# Exams page
|
||||
ft.Column([
|
||||
ft.Text(" Exams", size=30, weight="bold"),
|
||||
]),
|
||||
|
||||
# Attendance page
|
||||
ft.Column([
|
||||
ft.Text(" Attendance", size=30, weight="bold"),
|
||||
]),
|
||||
|
||||
# Behaviour page
|
||||
ft.Column([
|
||||
ft.Text(" Behaviour Notes", size=30, weight="bold"),
|
||||
]),
|
||||
|
||||
# Settings page
|
||||
ft.Column([
|
||||
ft.Text(" Settings", size=30, weight="bold"),
|
||||
]),
|
||||
]
|
||||
return pages[index]
|
||||
|
||||
# Function to switch content
|
||||
def update_content(index):
|
||||
main_container.content = changePage(index)
|
||||
def update_content(e):
|
||||
main_container.content = change_page(e.control.selected_index)
|
||||
page.update()
|
||||
|
||||
# Initial content display container
|
||||
main_container = ft.Container(
|
||||
content=changePage(0),
|
||||
expand=True,
|
||||
)
|
||||
|
||||
# Navigation Rail
|
||||
bar = ft.NavigationRail(
|
||||
nav_rail = ft.NavigationRail(
|
||||
selected_index=0,
|
||||
label_type=ft.NavigationRailLabelType.ALL,
|
||||
extended=False,
|
||||
|
@ -508,41 +106,15 @@ def main(page: ft.Page):
|
|||
group_alignment=0,
|
||||
destinations=[
|
||||
ft.NavigationRailDestination(
|
||||
icon=ft.Icons.HOME_OUTLINED, selected_icon=ft.Icons.HOME, label="Home"
|
||||
),
|
||||
ft.NavigationRailDestination(
|
||||
icon=ft.Icons.LOOKS_6_OUTLINED, selected_icon=ft.Icons.LOOKS_6, label="Grades"
|
||||
),
|
||||
ft.NavigationRailDestination(
|
||||
icon=ft.Icons.BACKPACK_OUTLINED, selected_icon=ft.Icons.BACKPACK, label="Timetable"
|
||||
),
|
||||
ft.NavigationRailDestination(
|
||||
icon=ft.Icons.BOOK_OUTLINED, selected_icon=ft.Icons.BOOK, label="Homework"
|
||||
),
|
||||
ft.NavigationRailDestination(
|
||||
icon=ft.Icons.CALENDAR_TODAY_OUTLINED, selected_icon=ft.Icons.CALENDAR_TODAY, label="Exams"
|
||||
),
|
||||
ft.NavigationRailDestination(
|
||||
icon=ft.Icons.EVENT_NOTE_OUTLINED, selected_icon=ft.Icons.EVENT_NOTE, label="Attendance"
|
||||
),
|
||||
ft.NavigationRailDestination(
|
||||
icon=ft.Icons.STICKY_NOTE_2_OUTLINED, selected_icon=ft.Icons.STICKY_NOTE_2, label="Behaviour"
|
||||
),
|
||||
ft.NavigationRailDestination(
|
||||
icon=ft.Icons.SETTINGS_OUTLINED, selected_icon=ft.Icons.SETTINGS_ROUNDED, label="Settings"
|
||||
),
|
||||
icon=item[0]+"_OUTLINED",
|
||||
selected_icon=item[0],
|
||||
label=item[1]
|
||||
) for item in NAV_ITEMS
|
||||
],
|
||||
on_change=lambda e: update_content(e.control.selected_index),
|
||||
on_change=update_content
|
||||
)
|
||||
|
||||
page.add(
|
||||
ft.Row(
|
||||
[
|
||||
bar,
|
||||
main_container,
|
||||
],
|
||||
expand=True,
|
||||
)
|
||||
)
|
||||
main_container = ft.Container(content=change_page(0), expand=True)
|
||||
page.add(ft.Row([nav_rail, main_container], expand=True))
|
||||
|
||||
ft.app(main)
|
||||
ft.app(main)
|
Loading…
Add table
Reference in a new issue