-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain.py
133 lines (112 loc) · 3.97 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import logging
from pathlib import Path
import dearpygui.dearpygui as dpg
from dearpygui import demo
from screeninfo import get_monitors
import Application
import GUI
logger = logging.getLogger("Core.Main")
DETECT_FACES = False
def toggle_detect_faces():
global DETECT_FACES
DETECT_FACES = not DETECT_FACES
logger.info(f"Face detection set to {DETECT_FACES}")
def setup_db():
"""
Creates the sqlite database based on the schema in Application/schema.sql
"""
with open(Path("Data/schema.sql")) as file:
query = "".join(file.readlines())
connection = Application.db.connect()
connection.executescript(query)
connection.close()
def make_image_window(path: Path):
GUI.ImageWindow(path, DETECT_FACES)
def load_image_folder(sender, app_data, user_data):
path = Path(app_data["file_path_name"])
make_image_window(path)
def load_mess_list(sender, app_data, user_data):
# yuck
path = next(iter(app_data["selections"].values()))
path = Path(path)
Application.db.read_mess_list(path)
GUI.modal_message("Mess list loaded successfully!")
def main():
setup_db()
dpg.create_context()
dpg.create_viewport(title="DoPy")
core_logger = logging.getLogger("Core")
gui_logger = logging.getLogger("GUI")
core_logger.setLevel(logging.DEBUG)
gui_logger.setLevel(logging.DEBUG)
formatter = logging.Formatter(
"[{threadName}][{asctime}] [{levelname:<8}] {name}: {message}",
"%H:%M:%S",
style="{",
)
monitors = get_monitors()
for monitor in monitors:
if monitor.is_primary and monitor.width > 1366:
dpg.set_global_font_scale(1.25)
with dpg.window(tag="Primary Window"):
with dpg.file_dialog(
directory_selector=False,
show=False,
tag="mess_list_file_dialog",
callback=load_mess_list,
height=400,
):
dpg.add_file_extension(".csv", color=(0, 255, 0, 255), custom_text="[CSV]")
dpg.add_file_dialog(
directory_selector=True,
show=False,
tag="roll_folder_dialog",
callback=load_image_folder,
height=400,
)
with dpg.menu_bar():
with dpg.menu(label="Tools"):
dpg.add_menu_item(
label="Load Roll",
callback=lambda: dpg.show_item("roll_folder_dialog"),
)
dpg.add_menu_item(
label="Load Mess List",
callback=lambda: dpg.show_item("mess_list_file_dialog"),
)
dpg.add_menu_item(label="Show Nicknames", callback=GUI.show_all_nicks)
dpg.add_menu_item(
label="Show Performance Metrics", callback=dpg.show_metrics
)
dpg.add_menu_item(
label="Logger Stress Test", callback=GUI.logger_stress_test
)
dpg.add_menu_item(
label="Toggle Face Detection", callback=toggle_detect_faces
)
with dpg.menu(label="Dev"):
dpg.add_menu_item(
label="Spawn Billing Window",
callback=lambda: GUI.BillingWindow(
roll="Dev", path=Path("Data/Dev"), num_images=40
),
)
dpg.add_menu_item(label="Show GUI Demo", callback=demo.show_demo)
dpg.add_button(
label="Music",
callback=lambda: GUI.MusicVisualiser(
"./Data/Audio/clodman.mp3"
).start(),
)
log = GUI.Logger()
log.setFormatter(formatter)
core_logger.addHandler(log)
gui_logger.addHandler(log)
dpg.setup_dearpygui()
dpg.set_primary_window("Primary Window", True)
dpg.set_viewport_vsync(False)
dpg.show_viewport(maximized=True)
dpg.start_dearpygui()
dpg.destroy_context()
if __name__ == "__main__":
main()