hashhub/main.py

151 lines
4.0 KiB
Python

import sys
sys.dont_write_bytecode = True
import mtTkinter as tk
from tkinter import ttk as tkk
import PCPL
import langsys
import time
import subprocess
import sys
import hashengine
import os
import random
import string
import easygui
global LH
global gamedata
gamedata = {}
LH = langsys.langhandler()
lang = open("clang", 'r')
lang = lang.read()
LH.setlang(lang)
# LH.string("")
PCPL.interpreter.ENG = hashengine
class script:
def __init__(self):
self.code = ""
def execute(self):
PCPL.resetvar()
PCPL.LIS("HASHBASE")
PCPL.run(self.code)
class preview:
def __init__(self, size, container, offset):
self._size = size
self._grid = {}
self._win = container
for y in range(size[1]):
for x in range(size[0]):
temp = tk.Label(text=" ")
temp.grid(row=y+offset[1], column=x+offset[0])
self._win.update()
self._grid[f"{x}:{y}"] = temp
def coltohex(self, target):
colors = []
target = [target.r, target.g, target.b]
for i in target:
colors.append(("0"*(2-len(hex(i)[2:])))+hex(i)[2:])
out = ""
for i in colors:
out = out + i
return "#"+out
def pix(self, x, y, text, bcolor, fcolor):
if f"{x}:{y}" in self._grid:
self._grid[f"{x}:{y}"].config(text=text, bg=self.coltohex(bcolor), fg=self.coltohex(fcolor))
self._win.update()
def selectlang(new):
lang = open("clang", 'w')
lang.write(new)
lang.close()
container.quit()
subprocess.Popen([sys.executable, __file__])
def add(objtype):
global objtree
obj = getattr(types, objtype)()
temp = {"id": objtype, "args": dir(obj), "name": LH.string(objtype)}
id = ""
chars = list(string.ascii_letters)
for i in range(255):
id = id + random.choice(chars)
objtree.insert("", tk.END, text=LH.string(objtype), image=icons[objtype], iid=id)
gamedata[id] = temp
def renameobj():
target = objtree.focus()
if target == "": return
new = easygui.enterbox(LH.string("NN"), LH.string("rename"))
if new:
objtree.item(target, text=new)
gamedata[target]["name"] = new
def delobj():
target = objtree.focus()
if target == "": return
objtree.delete(target)
gamedata.pop(target)
def rpopup(event):
try:
rmenu.tk_popup(event.x_root, event.y_root)
finally:
rmenu.grab_release()
def GUIinit():
global container
global objtree
global rmenu
container = tk.Tk()
global icons
icons = {}
for i in os.listdir("icons"):
icons[i.split(".")[0]] = tk.PhotoImage(file=f"icons/{i}")
#tree init
objtree = tkk.Treeview(container)
objtree.grid()
#right click menu
rmenu = tk.Menu(container, tearoff=0)
rmenu.add_command(label=LH.string("rename"), command=renameobj)
rmenu.add_command(label=LH.string("delete"), command=delobj)
objtree.bind("<Button-3>", rpopup)
#menu init
menu = tk.Menu(container)
container.config(menu=menu)
filemenu = tk.Menu(menu)
menu.add_cascade(label=LH.string("file"), menu=filemenu)
filemenu.add_command(label=LH.string("new"))
filemenu.add_command(label=LH.string("open"))
filemenu.add_separator()
filemenu.add_command(label=LH.string("exit"), command=container.quit)
addmenu = tk.Menu(menu)
menu.add_cascade(label=LH.string("add"), menu=addmenu)
addmenu.add_command(label=LH.string("obj"), command=lambda: add("obj"))
addmenu.add_command(label=LH.string("script"), command=lambda: add("script"))
langmenu = tk.Menu(menu)
menu.add_cascade(label=LH.string("langs"), menu=langmenu)
for i in LH.getlangs():
langmenu.add_command(label=i, command=lambda i=i: selectlang(i))
container.mainloop()
global types
types = hashengine.enum({"obj": hashengine.obj, "script": script})
icon = hashengine.enum({"obj": "icons/object.png", "script": "icons/script.pngg"})
GUIinit()