diff --git a/main.py b/main.py index 66ee6d0..168adac 100644 --- a/main.py +++ b/main.py @@ -1,103 +1,505 @@ import flet as ft -# 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") -] +# vars +grade1 = "#F44336" +grade2 = "#FF9800" +grade3 = "#eebd00" +grade4 = "#4CAF50" +grade5 = "#2196F3" +grade6 = "#9C27B0" +gradeother = "#5D5D5D" def main(page: ft.Page): page.title = "Fuji" page.theme = ft.Theme(color_scheme_seed=ft.Colors.RED) - - 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([ + + def changePage(index): + pages = [ + # Home page + ft.Column([ ft.Text(" Home", size=30, weight="bold"), ft.Text("\n", size=30, weight="bold"), ft.Row([ - 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"), - ]) + 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"), + ]), - def update_content(e): - main_container.content = change_page(e.control.selected_index) + # 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) page.update() + # Initial content display container + main_container = ft.Container( + content=changePage(0), + expand=True, + ) + # Navigation Rail - nav_rail = ft.NavigationRail( + bar = ft.NavigationRail( selected_index=0, label_type=ft.NavigationRailLabelType.ALL, extended=False, @@ -106,15 +508,41 @@ def main(page: ft.Page): group_alignment=0, destinations=[ ft.NavigationRailDestination( - icon=item[0]+"_OUTLINED", - selected_icon=item[0], - label=item[1] - ) for item in NAV_ITEMS + 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" + ), ], - on_change=update_content + on_change=lambda e: update_content(e.control.selected_index), ) - main_container = ft.Container(content=change_page(0), expand=True) - page.add(ft.Row([nav_rail, main_container], expand=True)) + page.add( + ft.Row( + [ + bar, + main_container, + ], + expand=True, + ) + ) -ft.app(main) \ No newline at end of file +ft.app(main)