diff --git a/customtk.py b/customtk.py new file mode 100644 index 0000000..4930386 --- /dev/null +++ b/customtk.py @@ -0,0 +1,190 @@ +from os.path import isfile, join, exists +import customtkinter +from CTkMessagebox import CTkMessagebox +from subfiles import helpers, install, savetools, themes, comunic + +import json + +from subprocess import Popen, PIPE +import threading + +from pathlib import Path +from sys import platform + + +from hashlib import sha256 + +from os import listdir +from os.path import isfile, join, exists + +import shutil +from websockets.sync.client import connect + + +customtkinter.set_appearance_mode("System") +customtkinter.set_window_scaling(1) +customtkinter.set_widget_scaling(1) + +def placeholder(): + print("placeholder called") + pass + +class menuTools: + def sideButtons(self, buttonList, frame): + for button in buttonList.keys(): + sideButton = customtkinter.CTkButton(frame, height=28, hover_color=self.theme["highlight_color"], + border_color=self.theme["highlight_color"], + border_width=(self.x * .001), + fg_color="transparent", + text=button, + command=buttonList[button]) + sideButton.pack(pady=(self.y * .01), side="top", anchor="nw") + + def labelDown(self, labelList, frame, column): + newFrame=customtkinter.CTkFrame(frame, fg_color="transparent") + newFrame.grid(row=0, column=3, sticky="nswe") + + i=1 + l = [] + for labelText in labelList: + label = customtkinter.CTkLabel(newFrame, textvariable=labelText, height=28, text_color="white") + l.append(label) + + for g in l: + g.pack(anchor='nw') + i+=1 + + + +class menus(): + + def serverMenu(self): + helpers.removeChildren(self.mainFrame) + + topFrame = customtkinter.CTkFrame(self.mainFrame, fg_color=self.theme["bg_deep"], corner_radius=10, height=(self.y * .80), width=(self.x * (.70)), + + ) + topFrame.pack(pady=(self.y * .10)) + topFrame.grid_propagate(0) + + + sideFrame = customtkinter.CTkFrame(topFrame, width=(self.x * .7 * .25), height=self.y*.8, fg_color=self.theme['bg_deep']) + sideFrame.grid(row=0, column=0, sticky="ns") + + borderFrame=customtkinter.CTkFrame(topFrame, width=(self.x * .7 * .01), height=(self.y*.8), fg_color=self.theme['bg_color']) + borderFrame.grid(row=0, column=1, sticky="ns") + sideFrame.grid_propagate(1) + + buttonList = { + "Start Server" : lambda: placeholder(), + "Open Server Location": lambda: helpers.openLocation(self, comunic.getSnPath('sngconfig.json')) + } + menuTools.sideButtons(self, buttonList=buttonList, frame=sideFrame) + + self.logArea = customtkinter.CTkTextbox(topFrame, width=(self.x * .7 * .74)) + self.logArea.grid(row=0, column=2, sticky="ns") + + def updateMenu(self): + helpers.removeChildren(self.mainFrame) + + topFrame = customtkinter.CTkFrame(self.mainFrame, fg_color=self.theme["bg_deep"], corner_radius=10, height=(self.y * .80), width=(self.x * (.70)), + + ) + topFrame.pack(pady=(self.y * .10)) + topFrame.grid_propagate(0) + + + sideFrame = customtkinter.CTkFrame(topFrame, width=(self.x * .7 * .25), height=self.y*.8, fg_color=self.theme['bg_deep']) + sideFrame.grid(row=0, column=0, sticky="ns") + + borderFrame=customtkinter.CTkFrame(topFrame, width=(self.x * .7 * .01), height=(self.y*.8), fg_color=self.theme['bg_color']) + borderFrame.grid(row=0, column=1, sticky="ns") + sideFrame.grid_propagate(1) + + self.versions = [ + customtkinter.StringVar(), + customtkinter.StringVar() + ] + + buttonList = { + "Open Client Location" : lambda: placeholder(), + "Open Server Location": lambda: helpers.openLocation(self, comunic.getSnPath(self.configFile)), + "Update Client" : lambda: comunic.downloadLatestDll(self, comunic.getSnPath(self.configFile)) + } + menuTools.sideButtons(self, buttonList=buttonList, frame=sideFrame) + + + self.versions[0].set("Checking Server Version") + self.versions[1].set("Checking Client Version") + + helpers.bgThread(comunic.getLatestVersions, [self, 'tempFile.json', self.versions]) + + + menuTools.labelDown(self, labelList=self.versions, frame=topFrame, column=3) + + + + + + +class main(): + def __init__(self, configFile): + self.configFile = configFile + self.debug = False + self.root = customtkinter.CTk() + self.x=750 + self.y=500 + self.theme = themes.getThemes(self)["black_orange"] + print() + for lib in [helpers, install, savetools]: + lib.check() + self.rightFrame = customtkinter.CTkScrollableFrame(self.root, + orientation="vertical", + width=(self.x * .20), + height=(self.y * 1), + fg_color=self.theme["fg_color"], + bg_color=self.theme["bg_color"], + corner_radius=0 + ) + + + buttonList = { + "Server" : lambda: menus.serverMenu(self), + "Inventory Management": lambda: placeholder(), + "Server Settings": lambda: placeholder(), + "Client" : lambda: placeholder(), + "Scripts" : lambda: placeholder(), + "Script Store": lambda: placeholder(), + "Inline Scripting" : lambda: placeholder(), + "Metadata" : lambda: placeholder(), + "Arsenal Management": lambda: placeholder(), + "Weapon Upgrades" : lambda: placeholder(), + "Client Settings": lambda: placeholder(), + "Updates": lambda: menus.updateMenu(self), + "GUI Settings" : lambda: placeholder() + } + + menuTools.sideButtons(self, buttonList, self.rightFrame) + self.rightFrame.grid(row=0, column=0) + + self.mainFrame = customtkinter.CTkScrollableFrame(self.root, + width=(self.x * (1-.20)), + height=(self.y * 1), + fg_color=self.theme["bg_color"], + bg_color=self.theme["bg_color"], + corner_radius=0) + + self.mainFrame.grid(row=0, column=1) + + self.root.title("SpaceNinGui CustomTK 1.0.0") + + self.root.geometry(f"{str(self.x)}x{str(self.y)}") + self.root.resizable(width=False, height=False) + self.root.mainloop() + + +if __name__ == "__main__": + if isfile('sngconfig.json'): + main('sngconfig.json') + else: + pass