injectorHub/ui/injectimg.py

126 lines
4.8 KiB
Python

import os
import sys
from magictk import mtk, color_tmpl
from magictk import fontconfig
from ui.lang import l
from logger.logger import *
from lib import vars
from lib import sync_disk
from tkinter import Label as tkLabel
now_frame = None
master: mtk.Frame = None
checkboxlist = []
img_list = []
iso_frame = None
def show_inject_page():
global now_frame, master, checkboxlist
inject_page = mtk.Frame(master)
mtk.Frame(inject_page, w=10000, height=8).pack(fill="x", expand=True)
head_frame = mtk.Frame(inject_page)
mtk.Frame(head_frame, w=10).pack(
side="left", fill="y", expand=True)
mtk.Frame(inject_page, height=8).pack(fill="x", expand=True, side="left")
def show_download_list(obj):
posx = obj.root.main_tk.winfo_pointerx()-10
posy = obj.root.main_tk.winfo_pointery()-10
menuobjs = mtk.MenuObjs()
menuobjs.addmenu("-- Do not support WIM!--", lambda *args: True)
menuobjs.addmenu("WePE(stable)", lambda *args: __import__("webbrowser").open(
"https://www.wepe.com.cn/"))
menuobjs.addmenu("EdgelessPE(thanks)", lambda *args: __import__("webbrowser").open(
"https://home.edgeless.top/"))
menuobjs.addmenu("FirPE(unstable)", lambda *args: __import__("webbrowser").open(
"https://www.firpe.cn/"))
menuobjs.addmenu("HotPE(unstable)", lambda *args: __import__("webbrowser").open(
"https://www.hotpe.top/"))
menuobjs.addmenu("MicrosoftDoc", lambda *args: __import__("webbrowser").open(
"https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/download-winpe--windows-pe?view=windows-11"))
menuobjs.addmenu("iTellYou", lambda *args: __import__("webbrowser").open(
"https://next.itellyou.cn//"))
mtk.Menu(obj.root, w=200, h=400, x=posx, y=posy, menuobj=menuobjs)
action_btn_frame = mtk.Frame(inject_page)
mtk.Frame(action_btn_frame, w=10).pack(expand=True, side="left")
savebtn = mtk.ButtonFill(action_btn_frame, text=l("Save"))
savebtn.pack(side="left")
mtk.Button(action_btn_frame, text=l("DownloadImg"),
func=show_download_list).pack(side="left")
mtk.Frame(action_btn_frame, w=10000).pack(
fill="x", expand=True, side="left")
mtk.Frame(inject_page, height=16).pack(fill="x", expand=True, side="left")
head_label = tkLabel(
head_frame,
width=10000,
text=l("InjectHead"),
background=color_tmpl.default_color["background"],
foreground=color_tmpl.default_color["primary_text"],
font=(fontconfig.getfont(), 14),
anchor='w'
)
head_label.pack(side="left", anchor='w')
head_frame.pack(fill="x", expand=True, anchor='w')
action_btn_frame.pack(fill="x", expand=True)
show_all_img = vars.SHOWALLIMAGE
def updatelist():
global checkboxlist, iso_frame, img_list
if (iso_frame is not None):
iso_frame.destroy() # 避免内存泄漏
del iso_frame
iso_frame = None
isolists = sync_disk.get_isolist()
imgsums = 0
for isopath in isolists:
if show_all_img or ('pe' in isopath.lower() or 'win' in isopath.lower()):
imgsums += 1
container_frame = mtk.Frame(inject_page)
mtk.Frame(container_frame, w=10).pack(expand=True, side="left")
iso_frame = mtk.Container(container_frame, w=10000, h=10000,
container_h=imgsums*20)
if (len(checkboxlist) > 0):
for i in checkboxlist:
i.canvas.destroy() # 避免内存泄漏
del i
checkboxlist = []
img_list = []
for isopath in isolists:
if show_all_img or ('pe' in isopath.lower() or 'win' in isopath.lower()):
isoname = isopath.split(os.sep)[-1]
if (len(isoname) > 40):
isoname = isoname[:37]+"..."
checkboxlist.append(mtk.Checkbox(
iso_frame, text=isoname, h=20, w=400))
img_list.append(isopath)
checkboxlist[-1].pack(fill="x", expand=True)
for injectedpath in sync_disk.get_injected_iso():
checkobj = checkboxlist[img_list.index(injectedpath)]
checkobj.ishover = 1
checkobj._update_color()
iso_frame.pack(fill="x", expand=True, side="left")
mtk.Frame(container_frame, w=20).pack(side="left")
container_frame.pack(fill="both", expand=True)
updatelist()
inject_page.pack(anchor="nw", side="top")
now_frame = inject_page
def inject_ui(root: mtk.Frame):
global master
inject_root_frame = mtk.Frame(root)
master = inject_root_frame
show_inject_page()
inject_root_frame.pack(fill="both", expand=True)
return inject_root_frame