151 lines
4.0 KiB
Python
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() |