Files
Horizon-OC/Source/Configurator/src/main.py
2025-10-03 16:40:29 -04:00

156 lines
5.4 KiB
Python

"""
HOC Configurator
Copyright (C) Souldbminer
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
version 2, as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
import dearpygui.dearpygui as dpg
# This prevents the window from reopening when closed
dpg.create_context()
from PIL import Image
import numpy as np
import common as c
import sys
import os
import webbrowser
import ctypes
import kip as k
import gpu
import cpu
import ram
from defaults import d
import installer as ins
import about
import misc
true = True
false = False
# if getattr(sys, 'frozen', False):
assets_path = os.path.join(sys._MEIPASS, 'assets/')
# else:
# assets_path = os.path.join(os.path.dirname(__file__), '../assets/')
cooler_image_path = assets_path + "coolerhd.png" # coolerHD Emoji from OC server
cooler_image = Image.open(cooler_image_path).convert("RGBA")
cooler_width, cooler_height = cooler_image.size
cooler_image_data = np.array(cooler_image) / 255.0
cooler_image_data = cooler_image_data.flatten()
lightos_image_path = assets_path + "lightos_c.png"
lightos_image = Image.open(lightos_image_path).convert("RGBA")
lightos_width, lightos_height = lightos_image.size
lightos_image_data = np.array(lightos_image) / 255.0
lightos_image_data = lightos_image_data.flatten()
samy_image_path = assets_path + "samy_c.png"
samy_image = Image.open(samy_image_path).convert("RGBA")
samy_width, samy_height = samy_image.size
samy_image_data = np.array(samy_image) / 255.0
samy_image_data = samy_image_data.flatten()
soul_image_path = assets_path + "soul_c.png"
soul_image = Image.open(soul_image_path).convert("RGBA")
soul_width, soul_height = soul_image.size
soul_image_data = np.array(soul_image) / 255.0
soul_image_data = soul_image_data.flatten()
with dpg.font_registry():
lexend = dpg.add_font(assets_path + "Lexend.ttf", 16)
with dpg.texture_registry(show=False):
dpg.add_static_texture(width=cooler_width, height=cooler_height, default_value=cooler_image_data, tag="coolerhd")
dpg.add_static_texture(width=lightos_width, height=lightos_height, default_value=lightos_image_data, tag="lightos")
dpg.add_static_texture(width=samy_width, height=samy_height, default_value=samy_image_data, tag="samy")
dpg.add_static_texture(width=soul_width, height=soul_height, default_value=soul_image_data, tag="soul")
with dpg.file_dialog(directory_selector=False, show=False, tag="file_dialog", width=500, height=300, modal=True, callback=k.store):
dpg.add_file_extension(".kip")
def refresh_drives():
setattr(ins, "drive_list", ins.get_drives())
dpg.configure_item("drive_select", items=ins.drive_list)
with dpg.window(label="Configurator", width=400, height=300,id="main_window"):
with dpg.tab_bar():
with dpg.tab(label="File"):
dpg.add_separator(label="Information")
dpg.add_text("Horizon OC is an open source overclocking tool for the Nintendo Switch Horizon OS")
dpg.add_text("For more information read the README on GitHub")
dpg.add_button(
label="Open GitHub",
callback=lambda: webbrowser.open("https://github.com/souldbminersmwc/Horizon-OC")
)
dpg.add_separator(label="Installation")
dpg.add_button(label="Refresh Drive List", callback=refresh_drives)
dpg.add_combo(
items=ins.drive_list,
default_value="Select a drive!",
tag="drive_select",
callback=ins.check_atmosphere
)
dpg.add_checkbox(label="Autosave", default_value=false, callback=ins.autosave_toggle)
dpg.add_text("", tag="status_text")
dpg.add_button(label="Save settings", callback=k.write_kip)
dpg.add_separator(label="Downloads")
dpg.add_button(label="Install Horizon OC Loader", callback=ins.downloadLoader)
dpg.add_button(label="Install Horizon OC Clock Manager", callback=lambda: ins.download_and_extract_zip(c, ins.hoc_clk_download_link, zip_filename="hoc_clk_temp.zip", success_message="Installed hoc-clk!"))
dpg.add_separator(label="Advanced")
dpg.add_button(label="Manually Select hoc.kip", callback=lambda: dpg.show_item("file_dialog"))
with dpg.tab(label="GPU", tag="gpu_tab"):
gpu.populate()
with dpg.tab(label="CPU", tag="cpu_tab"):
cpu.populate()
with dpg.tab(label="RAM", tag="emc_tab"):
ram.populate()
with dpg.tab(label="Misc", tag="misc_tab"):
misc.populate()
with dpg.tab(label="About", tag="about_tab"):
about.populate()
dpg.hide_item("gpu_tab")
dpg.hide_item("cpu_tab")
dpg.hide_item("emc_tab")
dpg.hide_item("misc_tab")
dpg.bind_font(lexend)
dpg.create_viewport(title="Horizon OC Configurator", width=854, height=480)
dpg.set_viewport_large_icon(assets_path + "icon.ico")
dpg.set_viewport_title("Horizon OC Configurator")
dpg.set_primary_window("main_window", True)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()