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("", 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()