grapher/gui.py

97 lines
3.3 KiB
Python

# Custom
from model import *
from appstate import AppState
# Layouts
from analyzer import analyzer_layout
from database import database_editor_layout
# External
from imgui_bundle import imgui, immapp, hello_imgui, ImVec2
# Built In
import shelve
from typing import List
def menu_bar(runner_params: hello_imgui.RunnerParams) -> None:
hello_imgui.show_app_menu(runner_params)
hello_imgui.show_view_menu(runner_params)
if imgui.begin_menu("File"):
clicked, _ = imgui.menu_item("Open", "", False)
if clicked:
pass
imgui.end_menu()
def status_bar(app_state: AppState) -> None:
imgui.text("Student Analyzer by @DerGrumpf")
def main() -> None:
app_state = AppState()
# Load Database
with shelve.open("state") as state:
v = state.get("DB")
if v:
db.init(v)
db.connect()
db.create_tables([Class, Student, Lecture, Submission])
app_state.update()
# Set Asset Folder
#hello_imgui.set_assets_folder()
# Set Theme
# Set Window Params
runner_params = hello_imgui.RunnerParams()
runner_params.app_window_params.window_title = "Analyzer"
runner_params.imgui_window_params.menu_app_title = "Analyzer"
runner_params.app_window_params.window_geometry.size = (1000, 900)
runner_params.app_window_params.restore_previous_geometry = True
runner_params.app_window_params.borderless = True
runner_params.app_window_params.borderless_movable = True
runner_params.app_window_params.borderless_resizable = True
runner_params.app_window_params.borderless_closable = True
# Load Fonts
#runner_params.callbacks.load_additional_fonts = lambda: f()
# Status Bar & Main Menu
runner_params.imgui_window_params.show_menu_bar = True
runner_params.imgui_window_params.show_menu_app = False
runner_params.imgui_window_params.show_menu_view = False
runner_params.imgui_window_params.show_status_bar = True
# Inside `show_menus`, we can call `hello_imgui.show_view_menu` and `hello_imgui.show_app_menu` if desired
runner_params.callbacks.show_menus = lambda: menu_bar(runner_params)
# Optional: add items to Hello ImGui default App menu
#runner_params.callbacks.show_app_menu_items = show_app_menu_items
runner_params.callbacks.show_status = lambda: status_bar(app_state)
# Application layout
runner_params.imgui_window_params.default_imgui_window_type = (
hello_imgui.DefaultImGuiWindowType.provide_full_screen_dock_space
)
runner_params.imgui_window_params.enable_viewports = True
runner_params.docking_params = analyzer_layout(app_state)
runner_params.alternative_docking_layouts = [
database_editor_layout(app_state)
]
# Save App Settings
runner_params.ini_folder_type = hello_imgui.IniFolderType.app_user_config_folder
runner_params.ini_filename = "Analyzer/Analyzer.ini"
# Uncomment if layout will stay the same at start
runner_params.docking_params.layout_condition = hello_imgui.DockingLayoutCondition.application_start
# Run it
add_ons_params = immapp.AddOnsParams()
add_ons_params.with_markdown = True
add_ons_params.with_implot = True
add_ons_params.with_implot3d = True
immapp.run(runner_params, add_ons_params)
if __name__ == "__main__":
main()